perm filename CKP.MAC[CH2,ALS]1 blob sn#272114 filedate 1977-03-30 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00051 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00007 00002		TITLE	CKP   	CHECKERS	12/31/70
C00011 00003	PLAY PLAY1 PLAY2
C00016 00004	GET GET2 GET1Z GET1A GET2A GET3
C00021 00005	GET4 GET4B GET4A GET5 GETF1 GETF2 GETF3
C00024 00006	SET PRUCT
C00027 00007	SET0A SET0B SET1A SET1B SET1 SET2 SET2A SE2 SE3 SE4 SF1 SF2 SF3 SF4 SF5 SET2C SET3 SET2B SET4 SET5 SET6
C00033 00008	SET7 SET7A SET8 SET8A TRESP TRESS SET9 SET9A SET10 SET11 SET12
C00037 00009	SET21 SET21A SET21D SET21B SET21C
C00040 00010	EXIT EXIT2 EXIT1 LOST WON
C00042 00011	FINDM FIND FIND1 FIND2 FIND3 FIND4 FIND6 FIND7 FIND8 FIND9
C00044 00012	MA MP MK MRF MLF MLB MRB MSKIP ME ME2 MMOVA MMOVP MOVA MOVP MVAA MVPP MOVAA MOVPP MMSKIP GTCNT0 GTCNT PRUC COUNTZ DEPTHZ MOVXZ COUNTX BPTR BPTRO PSKIP BRUSH MOVX TRF TLF TLB TRB TSKIP TE TE2
C00047 00013	OVA OVP OVK OVRF OVLF OVLB OVRB OVSKIP OVE OVE2 OVMOVA OVMOVP FLZZ FLX2 IA IP IK MOA MOP MOK MORF MOLF MOLB MORB MOVES MOJ BPLY BSKIP BZ DEPTHM TIMEX DEPTH U2MAX COUNTM PRUZ SA SP SK STEM FLIT EEBFLF LOADTA LC RFILL DFILL DSAVE
C00050 00014	PL1 PL2 PL2B PL3 PL4C PL4D PL4A PL4E PL4B PL5 PL5A PL5E PL5B PL1TAB
C00057 00015	PL5C PL8 PL4ERR PL14 PL13 PL13A PL10Z PL10 PL10A
C00060 00016	PL16 PL11
C00062 00017	PL17 PL18 PL18D SORT13 TRETM PL17A
C00066 00018	PL17B PL17D PL17C TREM TREOVM SORT14 SORT15 TREOV
C00069 00019	SORT16 SRT16Y SRT16Z SRT16X SRT16E SRT16F
C00072 00020	SRT16C SRT16D SORT17 SORT18 SORT19 SORT20 SORT21 SORT2A SORT22
C00075 00021	PL19 PL20 PL21 PL22 MERGE MERGE2 MERGE3 MERGE4 MERGE5 MERGE6 MERGE7 MERGE8 MERGE9 MERG12 TREMRG
C00079 00022	SETUPA SETUPB SORT SORTA SORT1 SORT2 SORT3 SORT4 SORT5 SORT6 SORT7 SORT8
C00083 00023	TIP TIP1 TIP1A TIP1B TIP1C TIP1D TIP3 TIP4
C00087 00024	TIP4A TIP5 TIP5A TIP5E TIP5C TIP5B TIP6 TIP6A TIP6B TIP7 TIP7A TIP8 TIP10
C00091 00025	SETT3 SETT5 TWIGT TIPTOV TIPT TIPT2 TIPT3 MAS
C00093 00026	GTREE STREE FLTREE TRTRE
C00095 00027	RETREE TREES TREES2
C00097 00028	SOUT SOUT2
C00098 00029	TREEX TREE UPNUMS UPNUM RAD UPNUM0 UPNUM1
C00100 00030	CTELLC DEBUG TELLC MTRE TREE1 TREE2 CORR
C00103 00031	TREEMP TREMP1 TREMP3 TRESTR TREST2 TREST3 BUFFX BUFFF BUFFF2 BUFFF3 BUFF
C00106 00032	MOVIN MOVIN0 MOVIN1 MOVIN2 MOVIN3 MOVIN4 MORE MOVIN5 MOVIN6 MOVIN7 MOVIN8 MKMOV MKPLAY
C00112 00033	MOVOUT MOVOUX MOVOUY MOVOUZ SUM SUM1
C00116 00034	HEAD SAVBD RECOUT RECIN RECORD GAMESV IMP
C00118 00035	ACCEPT ACC ACC1 ACC2 ACC3 ACCMOV MOVIT
C00122 00036	GO ERRGO PB PW SETB SETW BTERMS WTERMS PC SIG PORT PDP16
C00126 00037	BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
C00130 00038	BOUT BOUT0 BOUT1 BOUT2 BOUT3
C00132 00039	LEGM LEGM1 SETLEG EOG LPTREE TRESET INOUT
C00135 00040	PLAYBS PBS D W SETPAR
C00139 00041	TELPAR REPLYD PLAUSD STEMD PLAYD PLDPT
C00141 00042	CSFLAG TELLDW TIME RUNT CRUNT CDIFF DIFFT DIFF TOTAL CTOTAL TELLS TELLS2 NUMIN
C00144 00043	FSTCR CRFST
C00145 00044	MUP RF LF LB
C00148 00045	OVUP OVUPRF OVUPLF OVUPLB
C00151 00046	MACROS FOR SIGNATURE_TABLES
C00152 00047	NEG DATA DATA2 DATA3 U2SAV ZZZ BZZ FLZZZ NUM1
C00155 00048	EVA LEV1 CFC CFA1 CFA3 PHASFI DSKERR
C00158 00049	SIGT0 SIGN0 SIG0 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF TTABLE
C00160 00050	FINMOV FINMO2 FOUNDM BWINMV FOUNDN CHOICE FINMO3
C00163 00051	EXBITS DSKBKM BKMIN INPA BKMOVE BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN GETFIL SAV0 GETFIA MESS
C00166 ENDMK
C⊗;
	TITLE	CKP   	CHECKERS	12/31/70
SUBTTL	PLAY -- A. SAMUEL

;****************************************************
;   PLAY CONTAINS THOSE ESSENTIAL SET-UP PROCEDURES *
; TO INITIATE PLAY. IT RESTORES ALL NECESSARY       *
; REGISTERS, CLEARS WORKING SPACES TO THE EXTENT    *
; NECESSARY AND IT ACCEPTS AN INPUT BOARD OR STARTS *
; A NEW GAME. IT CALLS ON GET TO GET PLAY STARTED.  *
;****************************************************


;         REGISTER ASSIGNMENTS
;ASSIGNMENT	USAGE
Z=0
X1=1	;	INDEX MAIN
U1=2
X2=3	;	INDEX PATH
U2=4
X3=5	;	INDEX PLAUS
U3=6
X4=7	;	INDEX TWIG
U4=10
X5=11	;	PASS COLOR
U5=12
Q=13
A=14	;	ACTIVE
P=15	;	PASSIVE
K=16	;	KINGS
PDP=17	;	PUSHJ
I=Q


	OPDEF	TTYUUO	[51B8]

	INTERN	ACCEPT,BDOUT,BOUT,CDIFF,CRFST,CRUNT,CSFLAG,CTELLC,CTOTAL
	INTERN	D,DEBUG,DIFF,FSTCR,GO,LEGM,LPTREE,MOVIN,MESS,FINDM,IA
	INTERN	PB,PC,PLAYBS,PW,RUNT,SETB,SETW,SETPAR,IP,IK,MOVOUT,MOVES
	INTERN	TELLC,TELPAR,TOTAL,TREE,TRESET,W,CORR,FIND,RECIN,SUM
	INTERN	EXIT1,MOP,MOVX,LABEL
INTERN	INPSIZ,INPA,INPP,INPK,BOOKA,BOOKP,BOOKK,BOOKI,BOOKM
EXTERN	FINDFI,FINDX1,X4NORM,X4ALL,X4TAB,CRIP,REVERA,REVERP,REVERK,TLIST
	EXTERN	CFLAG,NOTICE,DATE,WHERE,PHASE
	EXTERN	OUTIN,TA,TP,TK,PLY,RJ2,RJ4,USEBOK,PCCNT
	EXTERN	ACSAV,BAD,BEGIN,BEST,BEST2,BESTM,BESTO
	EXTERN	BPBP,COLOR,COUNT,COUNTS,DECIN,DOTFLG,DWFLAG
	EXTERN	EEB,EEB2,EOL,ERR,FLAG,GOOD
	EXTERN	INTERP,LASCAR,LASTP,LEGAL,LOSE
	EXTERN	LPFLAG,LPTFIX,LRPDL,MJ,MJBP,MJW,MTYPE,NOYES,NUMOUT
	EXTERN	OA,OCT2,OCTIN,OCTOUT,OJ,OK,OLB,OLF,OP,ORDER,ORDER2,ORF
	EXTERN	PLA,PLAS,PLFLG,PLK,PLKS,PLLB,PLLBS,ORB
	EXTERN	PLLF,PLLFS,PLMJS,PLP,PLPS,PLRB,PLRBS,PLRF,PLRFS,PLSKIP,PLSKS
	EXTERN	PRINT,PRUNE,PUP,RJOUT,S,SAVE,SCAN,SCORE,SFLAG,SI
	EXTERN	SIDE,STOP,TAPER,TERPRI,TISKIP,TRUNK,TYI,TYO,U2S,U2SS,UPDATE
	EXTERN	WIDTH,WIN,WORSTM,X1S,X2S,X2SS,X4S,XTWIG,ZS,ZZ,PHASEV,KSTART

;THESE DEFINITIONS NEEDED TO DEFINE UNUSED GLOBALS
	EXTERN	NOTICE
	INTERN	ZL,LZERO,BEGINL,BEGL3,SYM,LCONTZ,DIVIDE,LCONTS
	INTERN	TRNKNO,LBYT,LFLAG,SIG,HEADFL

ZL:
LZERO:
BEGINL:
BEGL3:
SYM:
LCONTZ:
LCONTS:
DIVIDE:	JRST	NOTICE
TRNKNO:
LBYT:
LFLAG:	Z

PSHIFT=3		;ALLOWANCE FOR PLY IN X2
PSIZE=10		;PLY VALUE IN MAIN
PMASK=7			;MASK FOR PLY IN X2

HEADFL:	Z

;PLAY PLAY1 PLAY2

PLAY:	SKIPN	TREE
	JRST	PLAY1
	SETOM	PRFLG
	PUSHJ	PDP,DATE
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ / /]
	MOVEM	U1,DOTFLG
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /MOVE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,SI
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /, PDP-/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,MTYPE
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ / PLAYING /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,[ASCIZ /BLACK./]
	SKIPE	SIDE
	MOVEI	U1,[ASCIZ /WHITE./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TELPAR
	PUSHJ	PDP,BOUT
PLAY1:	MOVEI	U1,MA
	SETZM	(U1)
	CAIGE	U1,BZ+17
	AOJA	U1,PLAY1+1
	MOVE	Z,PLAUSD
	MOVEM	Z,PLDPT
	SETZB	X1,FLIT
	SETZM	STEM
	SETZM	TIPPLY		;X2 OK INITIALLY
	SETZB	X2,BPTR-1
	SETZM	U2MAX
	MOVE	U1,DEPTH
	LSH	U1,3
	MOVEM	U1,DEPTHM
	MOVEM	U1,DEPTHZ
	SETZB	X3,MA
	SETZB	X4,COUNT
	MOVE	U1,TIMEX
	LSH	U1,11
	MOVEM	U1,COUNTM
	SETZM	COUNTZ	;USED AS TEST FIRST TIME
	SETZB	U1,U2
	SETZB	U3,U4
	MOVEI	U5,17
	SETZM	PLA(U5)		;CLEAR PLAUS SPACE
	SOJGE	U5,.-1
	MOVE	Z,WIN
	MOVEM	Z,FLZZ
	MOVE	U5,[XWD FLZZ, FLZZ+1]
	BLT	U5,FLZZ+17	;WINS TO CAUSE INITIAL FLITTING
	MOVEM	Z,BEST
	MOVEM	Z,BEST2
	MOVE	Z,LOSE		;RESTORE ALL SCORE VALUES
	MOVEM	Z,SCORE
	MOVEI	U2,PSIZE-1
	MOVEM	Z,S(U2)
	MOVEM	Z,PRUZ(U2)
	SOJGE	U2,.-2
	MOVEI	U1,1
	MOVEI	U2,PSIZE*14-PSIZE
	SETOM	PLY-2(U2)
	SETZM	PLY-1(U2)
	MOVEM	U1,PSKIP-1(U2)
	MOVEM	U1,PLY(U2)
	MOVEM	U1,PSKIP(U2)
	SUBI	U2,PSIZE
	JUMPGE	U2,.-6
	MOVEM	A,IA		;SAVE IN INITIAL BOARD SPACE
	MOVEM	A,PLA(X3)	;ALSO GET READY FOR LEGAL
	MOVEM	P,IP
	MOVEM	P,PLP(X3)
	MOVEM	K,IK
	MOVEM	K,PLK(X3)
	MOVEM	K,KSTART
	PUSHJ	PDP,PHASEV
	PUSHJ	PDP,PHASFI
	MOVE	U1,SIDE
	MOVEM	U1,COLOR
	SETZ	X3,
	MOVE	U2,BTERMS
	SKIPE	COLOR
	MOVE	U2,WTERMS
	MOVEM	U2,CFLAG
	PUSHJ	PDP,LEGAL	;FIND LEGAL MOVES
	JRST	LOST		;GAME IS LOST
	AOJA	X3,.+10
	ADDI	X3,1
	MOVE	Z,EEB
	MOVEM	Z,EEB-1
	MOVEM	Z,EEB-2
	MOVE	Z,EEB2
	MOVEM	Z,EEB2-1
	MOVEM	Z,EEB2-2
	SKIPE	USEBOK
	PUSHJ	PDP,X4NORM
	SETZM	GETF1		;RESET GET FLAG 1 FOR OVER 8
	SETZM	GETF2		;RESET GET FLAG 2
	SETZB	X4,ORDER
	SETZM	ORDER2
	PUSHJ	PDP,GET		;GET FIRST 12 TRUNKS
	SOJE	X4,EXIT1+1	;SINGLE MOVE ESCAPE
	JUMPL	X4,BEGIN
	MOVE	A,IA
	MOVE	P,IP
	MOVE	K,IK
	SKIPE	USEBOK
	PUSHJ	PDP,FINMOV	;SEE IF BOOK MOVE IS SAVED
	SKIPN	TREE
	JRST	PLAY2
	MOVEI	U1,[ASCIZ /STARTING WITH TRUNK /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X4
	ADDI	U1,1
	CAILE	U1,10
	MOVEI	U1,10
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /								     FOR PDP-/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,MTYPE
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /:    MIN   SCORE     MAX/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
PLAY2:	MOVEI	U2,PSIZE*14-PSIZE
	MOVEM	X4,BRUSH(U2)
	MOVEM	X4,BRUSH+1(U2)
	SUBI	U2,PSIZE
	JUMPGE	U2,.-3
	SETZB	X1,X2
	SETZ	X3,
	MOVE	U2,ORDER
	LSHC	X2,4		;GET FIRST TRUNK
	SUBI	X2,1
	MOVEM	U2,ORDER	;RESTORE
	MOVE	Z,GTCNT(X2)
	MOVEM	Z,GTCNT0
	LSH	X2,3
	MOVEM	X2,TRUNK	;NEEDED FLPERX
	AOJA	X2,PL1

;GET GET2 GET1Z GET1A GET2A GET3

;*****************************************************
;	GET IS A SUBROUTINE WHICH GETS PLAY STARTED  *
; ON DIFFERENT TRUNKS SO THAT PLAUS CAN TAKE OVER.   *
; IT IS CALLED INITIALLY BY PLAY, TO ESTABLISH 8     *
; TRUNKS AND AGAIN LATER BY SORT TO GET ADDITIONAL   *
; TRUNKS IF THEY EXIST.                              *
;*****************************************************

GET:	MOVEI	X2,-2
	PUSHJ	PDP,PUP
	POPJ	PDP,		;ALL TRUNKS FOUND, LEAVE GET
	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	MOVEM	A,MOA(X4)	;SAVE IN MOVE SPACE
	MOVEM	P,MOP(X4)
	MOVEM	K,MOK(X4)
	PUSHJ	PDP,FINDM
	SKIPE	TREE
	PUSHJ	PDP,GTREE
	SETZM	MOJ(X4)
	PUSHJ	PDP,LEGAL	;FIND MOVES
	JRST	WON		;WINNING FIRST MOVE FOUND
	PUSHJ	PDP,GET1A	;JUMP MOVE
	MOVE	Z,PLRF(X3)	;SAVE MOVE VECTORS
	MOVEM	Z,MORF(X4)
	MOVE	Z,PLLF(X3)
	MOVEM	Z,MOLF(X4)
	MOVE	Z,PLLB(X3)
	MOVEM	Z,MOLB(X4)
	MOVE	Z,PLRB(X3)
	MOVEM	Z,MORB(X4)
	ADDI	X3,1		;INDEX
	MOVE	X1,X4		;GET TRUNK INDEX
	LSH	X1,PSHIFT+3	;TO INDEX MAIN
	MOVE	U4,X4
	LSH	U4,3		;TO INDEX OVERFLOW
	MOVEM	U4,TRUNK
	SETZM	OVA(U4)		;TRASH GUARD
	SETZM	GETCNT#		;TO COUNT BOARDS
GET2:	PUSHJ	PDP,PUP		;NOW CONTINUE
	JRST	GET4		;NO MORE BRANCHES
	MOVE	Z,GETCNT
	CAIL	Z,10		;WHERE TO
	JRST	GET3		;TO OVERFLOW
	MOVE	Z,MOA(X4)
	MOVEM	Z,MMOVA(X1)
	MOVEM	P,MMOVP(X1)
	MOVEM	A,MA(X1)
	MOVEM	P,MP(X1)
	MOVEM	K,MK(X1)
	PUSHJ	PDP,LEGAL
	JRST	GET1Z		;NO MOVES, SO DISCARD TRUNK
	PUSHJ	PDP,GET2A
	MOVE	Z,PLRF(X3)
	MOVEM	Z,MRF(X1)
	MOVE	Z,PLLF(X3)
	MOVEM	Z,MLF(X1)
	MOVE	Z,PLLB(X3)
	MOVEM	Z,MLB(X1)
	MOVE	Z,PLRB(X3)
	MOVEM	Z,MRB(X1)
	MOVEI	Z,1
	MOVEM	Z,MSKIP(X1)
	MOVE	Z,EEB(X3)	;START ME OFF RIGHT
	MOVEM	Z,ME(X1)
	MOVE	Z,EEB2(X3)
	MOVEM	Z,ME2(X1)
	ADDI	X1,1
	AOS	GETCNT
	JRST	GET2
GET1Z:	SKIPN	TREE
	JRST	GET4B
	MOVEI	U1,[ASCIZ /IGNORE THIS TRUNK/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	GET4B

GET1A:	SETOM	MOJ(X4)
GET2A:	MOVE	Z,EEB-2(X3)
	MOVEM	Z,EEB(X3)
	MOVE	Z,EEB2-2(X3)
	MOVEM	Z,EEB2(X3)
	POPJ PDP,

GET3:	MOVE	Z,GETCNT
	CAIG	Z,10
	MOVE	X1,TRUNK
	MOVE	Z,MOA(X4)
	MOVEM	Z,OVMOVA(X1)
	MOVEM	P,OVMOVP(X1)
	MOVEM	A,OVA(X1)
	MOVEM	P,OVP(X1)
	MOVEM	K,OVK(X1)
	PUSHJ	PDP,LEGAL
	SOJA	X3,GET		;NO MOVES, DISCARD TRUNK
	PUSHJ	PDP,GET2A
	MOVE	Z,PLRF(X3)
	MOVEM	Z,OVRF(X1)
	MOVE	Z,PLLF(X3)
	MOVEM	Z,OVLF(X1)
	MOVE	Z,PLLB(X3)
	MOVEM	Z,OVLB(X1)
	MOVE	Z,PLRB(X3)
	MOVEM	Z,OVRB(X1)
	MOVEI	Z,1
	MOVEM	Z,OVSKIP(X1)
	MOVE	Z,EEB(X3)
	MOVEM	Z,OVE(X1)
	MOVE	Z,EEB2(X3)
	MOVEM	Z,OVE2(X1)
	ADDI	X1,1
	SETZM	OVA(X1)
	AOS	GETCNT
	JRST	GET2
;GET4 GET4B GET4A GET5 GETF1 GETF2 GETF3

GET4:	MOVE	Z,GETCNT
	CAIGE	Z,10		;HOW MANY BRANCHES
	SETZM	MA(X1)		;SET STOP IN MAIN IF NEEDED
	SUBI	Z,1
	MOVEM	Z,GTCNT(X4)	;USED IN SET AFTER MOVEM GTCNT0
	MOVE	U3,X4
	ADDI	X4,1
	CAIG	X4,10		;PUT WHERE
	JRST	.+5		;INTO ORDER
	MOVE	U4,ORDER2
	LSHC	X4,-4
	MOVEM	U4,ORDER2
	JRST	.+4
	MOVE	U4,ORDER	;NOW FIX ORDER
	LSHC	X4,-4
	MOVEM	U4,ORDER	;SAVE ORDER
	MOVE	X4,U3		;RESTORE X4
	LSH	U3,PSHIFT		;GET INTO X2 FORM
	ADDI	U3,1		;SET PLY VALUE
	MOVEM	U3,FLX2(X4)	;SET UP FOR FLITTING
GET4B:	ADDI	X4,1
	SKIPE	GETF2		;IS THIS A FIRST PASS
	JRST	GET4A		;YES
	CAIGE	X4,14		;CHANGED FOR 12 TRUNKS
	SOJA	X3,GET		;SAFE TO GO ON
GET4A:	SETZM	GETF1
	SKIPE	PLRF-2(X3)
	JRST	GET5
	SKIPE	PLLF-2(X3)
	JRST	GET5
	SKIPE	PLLB-2(X3)
	JRST	GET5
	SKIPN	PLRB-2(X3)
	POPJ	PDP,		;NO MORE MOVES

GET5:	SETOM	GETF1		;OVER 12 SO SET FLAG AND SAVE
	MOVE	PLA-2(X3)
	MOVEM	PLAS
	MOVE	PLP-2(X3)
	MOVEM	PLPS
	MOVE	PLK-2(X3)
	MOVEM	PLKS
	MOVE	PLSKIP-2(X3)
	MOVEM	PLSKS
	MOVE	PLRF-2(X3)
	MOVEM	PLRFS		;SAVE FOR FUTURE USE
	MOVE	PLLF-2(X3)
	MOVEM	PLLFS
	MOVE	PLLB-2(X3)
	MOVEM	PLLBS
	MOVE	PLRB-2(X3)
	MOVEM	PLRBS
	MOVE	MJW-2(X3)
	MOVEM	PLMJS
	POPJ	PDP,		;MUST RETURN
GETF1:	Z			;MORE THAN 8 TRUNK FLAG
GETF2:	Z			;SECOND TIME IN FLAG
GETF3:	Z			;NEW TRUNK FLAG
;SET PRUCT

;********************************************************
;	SET IS USED TO SET-UP CONDITIONS FOR PLAUS      *
; AFTER A BACK UP HAS OCCURRED.  IT ALSO CONTAINS THE   *
; NECESSARY PROVISIONS FOR STILL FURTHER BACKING UP     *
; WHEN EMPTY BPTR WORDS ARE ENCOUNTERED, AND FOR        *
; SWITCHING TRUNKS WHEN THEY ARE EXHAUSTED.             *
;********************************************************

SET:	SETZM	MJW-1		;SAFETY PRECAUTION
	SETZM	TIPPLY		;RESTORE FOR U2 LESS THAN 10
	MOVE	U4,TRUNK
	SETZB	X1,OVA(U4)
	SETZM	BPTR-1(X2)	;CLEAN UP TRASH
	SUBI	X2,1
	SKIPN	U1,BPTR-1(X2)	;NEW BRANCH NUMBER
	JRST	SET10		;NO MORE BOARDS AT THIS LEVEL
	SETOM	STEM
	TRNN	X2,PMASK-1	;FULL DEPTH ON FIRST REPLY
	SETZM	STEM
	MOVE	X3,PLAYD
	MOVEM	X3,PLDPT
	MOVE	X3,X2
	LSH	X3,3
	LSHC	X1,4
	JUMPN	X1,.+4		;DIRTY BPTR?
	MOVEI	U1,[ASCIZ /DIRTY BPTR./]
	PUSHJ	PDP,PRINT
	JRST	SET10
	SUBI	X1,1
	IOR	X1,X3
	MOVEM	U1,BPTR-1(X2)	;REPLACE REMAINING
	MOVE	U2,X2
	ANDI	U2,PMASK
	CAILE	U2,2
	JRST	.+4		;CONSIDER PRUNING
	SKIPLE	GTCNT0		;TEST FOR JUMP REPLY
	CAIG	U2,1
	JRST	SET0B		;DO NOT PRUNE
	MOVE	Z,S-1(U2)
	CAMG	Z,PRUZ-1(U2)
	JRST	SET0A
	MOVEM	Z,PRUZ-1(U2)
	MOVE	Z,PRUCT-1(U2)
	MOVEM	Z,PRUC-1(U2)
	JRST	SET0B		;OK

PRUCT:	3		;PRUNING COUNT TABLE
	2		;N+1 BRANCHES TRIED
	1
	1
	1
	1
	1
	1
	1
;SET0A SET0B SET1A SET1B SET1 SET2 SET2A SE2 SE3 SE4 SF1 SF2 SF3 SF4 SF5 SET2C SET3 SET2B SET4 SET5 SET6

SET0A:	SOSGE	PRUC-1(U2)	;IS IT TIME TO PRUNE
	JRST	SET10		;YES
SET0B:	MOVE	U1,MSKIP-10(X1)	;THIS ESTABLISHES RELATION BETWEEN PSKIP AND MSKIP
	MOVEM	U1,PSKIP-1(X2)
	ADD	U1,PLY-1(X2)
	MOVEM	U1,PLY(X2)	;SET NEW BASE PLY
	XOR	U1,SIDE		;CLEAN UP COLOR
	ANDI	U1,1
	MOVE	Z,ME-10(X1)
	MOVEM	Z,EEB-1
	MOVEM	Z,EEB-2		;PREPARATION FOR BACKUP IN PLAUS
	MOVE	Z,ME2-10(X1)
	MOVEM	Z,EEB2-1
	MOVEM	Z,EEB2-2	;DITTO
	TRC	U1,1
	MOVEM	U1,COLOR	;SET NEW BASE COLOR
	SKIPE	TREE
	PUSHJ	PDP,STREE
	SETZ	X4,		;NEEDED LATER TO COUNT BOARDS
	MOVE	U2,X2
	ANDI	U2,PMASK
	MOVE	U1,PSKIP-1(X2)
	TRNE	U1,1
	JRST	SET1A
	MOVE	Z,S-1(U2)	;OK FOR EVEN SKIP
	JRST	SET1B

;ODD PSKIP CASE
SET1A:	MOVE	U3,X2
	MOVE	U1,PSKIP-2(U3)
	TRNN	U1,1
	SOJA	U3,.-2		;ODD ONE EXISTS
	ANDI	U3,PMASK
	MOVE	Z,S-2(U3)
SET1B:	MOVEM	Z,S(U2)
	MOVE	U1,X2		;NEED SECOND X1
	LSH	U1,3		;SIMULATE X1
	MOVEM	U1,X1SET#
	SKIPA
SET1:	EXCH	X1,X1SET
	SETZ	X3,
	PUSHJ	PDP,MUP
	JRST	SET6		;NO MORE MOVES
	EXCH	X1,X1SET
	MOVEM	P,MOVPP
SET2:	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	PUSHJ	PDP,LEGAL
	JRST	SET7		;NO LEGAL MOVES
	AOJA	X3,SET2B	;JUMP RETURN
	ADDI	X3,1
SET2A:	SETZM	SETC#		;TO COUNT MOVES
	SKIPE	U1,PLRF-1(X3)
	JRST	SF1		;ONE FOUND
SE2:	SKIPE	U1,PLLF-1(X3)
	JRST	SF2
SE3:	SKIPE	U1,PLLB-1(X3)
	JRST	SF3
SE4:	SKIPE	U1,PLRB-1(X3)
	JRST	SF4
	JRST	SF5		;MUST BE ONE

SF1:	AOS	SETC
	SUBI	U1,1
	AND	U1,PLRF-1(X3)
	JUMPN	U1,SET2C
	JRST	SE2

SF2:	SKIPE	SETC
	JRST	SET2C
	AOS	SETC
	SUBI	U1,1
	AND	U1,PLLF-1(X3)
	JUMPN	U1,SET2C
	JRST	SE3

SF3:	SKIPE	SETC
	JRST	SET2C
	AOS	SETC
	SUBI	U1,1
	AND	U1,PLLB-1(X3)
	JUMPN	U1,SET2C
	JRST	SE4

SF4:	SKIPE	SETC
	JRST	SET2C
	AOS	SETC
	SUBI	U1,1
	AND	U1,PLRB-1(X3)
	JUMPN	U1,SET2C
SF5:	CAIL	X3,14		;SAFER TO SAVE ANYWAY
	JRST	SET2C		;YES
	PUSHJ	PDP,PUP		;UPDATE
	SOJA	X3,SET7		;MUST BE ERROR
	JRST	SET2		;GO AROUND AGAIN

SET2C:	CAIL	X4,10
	JRST	SET4		;MUST SAVE IN OVERFLOW
	MOVEM	A,MA(X1)
	MOVEM	P,MP(X1)
	MOVEM	K,MK(X1)
	MOVE	Z,PLRF-1(X3)	;STORE ITEMS SUBJECT TO CHANGE
	MOVEM	Z,MRF(X1)
	MOVE	Z,PLLF-1(X3)
	MOVEM	Z,MLF(X1)
	MOVE	Z,PLLB-1(X3)
	MOVEM	Z,MLB(X1)
	MOVE	Z,PLRB-1(X3)
	MOVEM	Z,MRB(X1)
SET3:	MOVE	Z,EEB-1(X3)
	MOVEM	Z,ME(X1)
	MOVE	Z,EEB2-1(X3)
	MOVEM	Z,ME2(X1)
	MOVEM	X3,MSKIP(X1)
	SKIPE	TREE
	PUSHJ	PDP,SETT3
	ADDI	X1,1
	AOJA	X4,SET1

SET2B:	MOVE	Z,EEB-3(X3)
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
	JRST	SET2A

SET4:	CAIG	X4,10
	MOVE	X1,TRUNK
	MOVEM	A,OVA(X1)
	MOVEM	P,OVP(X1)
	MOVEM	K,OVK(X1)
	MOVE	Z,PLRF-1(X3)	;STORE ITEMS WHICH MAY CHANGE
	MOVEM	Z,OVRF(X1)
	MOVE	Z,PLLF-1(X3)
	MOVEM	Z,OVLF(X1)
	MOVE	Z,PLLB-1(X3)
	MOVEM	Z,OVLB(X1)
	MOVE	Z,PLRB-1(X3)
	MOVEM	Z,OVRB(X1)
SET5:	MOVE	Z,EEB-1(X3)
	MOVEM	Z,OVE(X1)
	MOVE	Z,EEB2-1(X3)
	MOVEM	Z,OVE2(X1)
	MOVEM	X3,OVSKIP(X1)
	SKIPE	TREE
	PUSHJ	PDP,SETT5
	SETZM	OVA+1(X1)
	ADDI	X1,1
	AOJA	X4,SET1

SET6:	EXCH	X1,X1SET
	CAIGE	X4,10
	SETZM	MA(X1)		;SET GUARD IN MAIN IF NEEDED
	JUMPLE	X4,SET8		;NO MUP CASE
	MOVE	U1,X2
	ANDI	U1,PMASK
	CAIL	U1,PSIZE-1	;CAN WE GO ON
	AOJA	X2,TIP		;NO
	MOVE	U3,BRUSH-1(X2)
	ADD	U3,X4
	MOVEM	U3,BRUSH(X2)
	CAMG	U1,WIDTH
	AOJA	X2,PL1		;GO ON
	ADD	U3,TAPER
	MOVEM	U3,BRUSH-1(X2)
	CAMLE	U3,DEPTHM
	AOJA	X2,TIP		;TIME TO STOP
	AOJA	X2,PL1		;INDEX TO PL1
;SET7 SET7A SET8 SET8A TRESP TRESS SET9 SET9A SET10 SET11 SET12

;NO LEGAL MOVES AFTER MUP
SET7:	TRNE	X3,1
	JRST	SET1
	MOVE	U1,PSKIP-1(X2)
	TRNE	U1,1
	JRST	SET8A	;ODD NO LEGAL LIKE EVEN NO MUP
SET7A:	MOVE	U2,X2
	ANDI	U2,PMASK
	MOVE	Z,WIN
	SUB	Z,PLY(X2)
	SUB	Z,X3
	SETZ	X3,
	SKIPE	TREE
	PUSHJ	PDP,TRESS	;YES TRESS
	CAMG	Z,S-1(U2)
	MOVE	Z,S-1(U2)
	JRST	SET11

SET8:	MOVE	U1,PSKIP-1(X2)
	TRNE	U1,1
	JRST	SET7A	;ODD NO MUP LIKE EVEN NO LEGAL
SET8A:	MOVE	U2,X2
	ANDI	U2,PMASK
	MOVE	Z,LOSE
	ADD	Z,PLY(X2)
	ADD	Z,X3
	SETZ	X3,
	SKIPE	TREE
	PUSHJ	PDP,TRESS
	CAMLE	Z,S-1(U2)
	MOVEM	Z,S-1(U2)
	AOJA	X2,SET		;ANOTHER AT SAME LEVEL

TRESP:	SETZM	X3
	MOVE	U1,PSKIP-1(X2)
	TRNN	U1,1
	MOVNS	Z
	MOVE	U2,X2
	ANDI	U2,PMASK
	SKIPN	U2
	ADDI	U2,PSIZE
TRESS:	MOVE	U5,S-1(U2)	;PREPARE A-B SCORES
	MOVE	U3,X2
	MOVE	U1,PSKIP-2(U3)
	TRNN	U1,1
	SOJA	U3,.-2
	ANDI	U3,PMASK
	SKIPN	U3
	ADDI	U3,PSIZE
	MOVE	U3,S-2(U3)
	MOVE	U1,PSKIP-1(X2)
	TRNE	U1,1
	EXCH	U5,U3
	MOVEM	U3,ZZ-2(X3)
	MOVEM	U5,ZZ-1(X3)
	JRST	TREES

;NO MORE BOARDS BACK-UP
SET9:	MOVEM	Z,ZS
	SKIPE	TREE
	PUSHJ	PDP,TRESP
	MOVE	Z,ZS
	MOVEM	Z,S-1(U2)
	JRST	SET10

SET9A:	SKIPE	TREE
	PUSHJ	PDP,TRESP
SET10:	MOVE	U2,X2
	ANDI	U2,PMASK		;GET PLY PORTION ONLY
	SKIPN	U2
	ADDI	U2,PSIZE		;CORRECTION IF PLY OVER
	MOVE	Z,S-1(U2)
SET11:	MOVE	U1,PSKIP-2(X2)	;BACKING UP, REMEMBER
	TRNN	U1,1
	MOVNS	Z		;WOOPS, WRONG SIGN!
	CAIGE	U2,2
	JRST	SET12		;WILL GO ON TO SET21
	MOVE	U3,X2
	SUBI	U3,1		;BACK 1
	MOVE	U1,PSKIP-2(U3)	;TEST EARLIER SKIP
	TRNN	U1,1		;IS IT ODD
	SOJA	U3,.-2		;ONE ALWAYS EXISTS
	MOVE	U1,U3
	ANDI	U1,PMASK
	MOVM	U5,Z
	CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
	JRST	.+7
	LSH	U5,-4		;DIVIDE BY 16
	MOVNS	U5
	ADD	U5,Z
	CAMLE	U5,S-2(U1)
	JRST	SET12
	JRST	.+3
	CAMLE	Z,S-2(U1)	;CAN WE ALPHA PRUNE
	JRST	SET12		;NO SO BETA TEST
	MOVE	X2,U3		;YES
	SOJG	U1,SET		;DEEP ENOUGHT TO SET
	JRST	SET21A		;NEW TRUNK NEEDED
SET12:	MOVNS	Z
	SOJLE	U2,SET21	;COMPARE WITH SCORE
	CAMLE	Z,S-1(U2)
	MOVEM	Z,S-1(U2)
	JRST	SET
;SET21 SET21A SET21D SET21B SET21C

SET21:	TRNN	X2,PMASK
	SUBI	X2,1
	LSH	X2,-PSHIFT
	CAMG	Z,SCORE
	JRST	SET21D
	MOVEM	Z,SCORE
	MOVEM	X2,MOVX		;SAVE AS MOVE RECORD
	JRST	SET21D
SET21A:	TRNN	X2,PMASK
	SUBI	X1,1
	LSH	X2,-PSHIFT
SET21D:	MOVE	U1,COUNT
	AOS	U2,COUNTX
	MOVEM	X2,MOVXZ(U2)
	SETOM	MOVXZ+1(U2)
	MOVE	U3,DEPTHM
	MOVEM	U3,DEPTHZ(U2)
	SETZM	DEPTHZ+1(U2)
	MOVEM	U1,COUNTZ(U2)		;SAVE TO PRINT
	SETZM	COUNTZ+1(U2)		;PRINT STOP
	SUB	U1,COUNTZ-1(U2)		;INCREMENT COUNT
	MOVE	U3,COUNTM
	SUB	U3,U1
	MOVEM	U3,COUNTM
	MOVEI	Z,4			;CORRECTION
	CAMG	U1,COUNTM
	JRST	.+3
	MOVNS	Z
	JRST	.+4
	IMULI	U1,5
	LSH	U1,-2
	CAMG	U1,COUNTM
	ADDM	Z,DEPTHM
	SKIPN	U1,ORDER
	JRST	EXIT
	SETZ	X1,
	LSHC	X1,4
	MOVEM	U1,ORDER	;SAVE REST OF POINTER
	MOVE	Z,FLZZ-1(X1)
	CAMLE	Z,BAD		;IF Z < BAD THEN NO USE TO GO ON
	JRST	.+7
	SKIPN	TREE
	JRST	.+4
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /REMAINING TRUNKS TERMINATED./]
	PUSHJ	PDP,PRINT
	JRST	EXIT
	SKIPE	TREE
	PUSHJ	PDP,TRTRE
	MOVEI	U1,7
	MOVE	Z,LOSE
	MOVEM	Z,PRUZ(U1)
	MOVE	U2,PRUCT(U1)
	MOVEM	U2,PRUC(U1)
	SOJGE	U1,.-3
	MOVE	U1,STEMD
	MOVEM	U1,PLDPT
	SETZM	STEM
	MOVE	X2,FLX2-1(X1)	;GET NEW STARTING PLACE
	SUBI	X1,1
	MOVE	Z,GTCNT(X1)
	MOVEM	Z,GTCNT0		;CURRENT VALUE
	LSH	X1,3
	MOVEM	X1,TRUNK	;SAVE FOR OVERX USAGE
	MOVE	Z,SCORE		;NOW FIX SCORE
	MOVE	Q,LOSE
	MOVE	U2,X2
	MOVE	U3,X2
	ANDI	U3,PMASK
	SKIPN	U3
	ADDI	U3,PSIZE
	MOVE	U1,PLY-1(U2)
	TRNE	U1,1
	JRST	.+4
	MOVEM	Z,S-1(U3)
	SUBI	U2,1
	SOJG	U3,.-5
	MOVEM	Q,S-1(U3)
	SUBI	U2,1
	SOJG	U3,.-10
	SKIPN	U2,ORDER2
	JRST	SET21C
	SKIPN	U1,ORDER
	JRST	SET21B
	SETZ	X1,
	LSHC	X1,4
	MOVE	Z,FLZZ-1(X1)
	CAMG	Z,BEST2
	JRST	.+3
	MOVEM	Z,BEST
	JRST	SET21C
	EXCH	Z,BEST2
	MOVEM	Z,BEST
SET21B:	EXCH	U2,ORDER
	MOVEM	U2,ORDER2
SET21C:	TRNN	X2,PMASK
	JRST	TIP
	MOVE	U1,BRUSH-1(X2)
	CAML	U1,DEPTHM
	JRST	TIP
	JRST	PL1
;EXIT EXIT2 EXIT1 LOST WON

;   EXIT REPORTS FINAL MOVE.
EXIT:	SKIPN	TREE
	JRST	EXIT2
	PUSHJ	PDP,TERPRI
	SETO	U2,
	MOVE	U1,COUNTS(U2)
	SETZM	COUNTS(U2)
	JUMPE	U1,.+4
	SETZ	X2,
	MOVM	Z,U1
	PUSHJ	PDP,RJ4
	CAIGE	U2,24
	AOJA	U2,.-7
	PUSHJ	PDP,TERPRI
EXIT2:	MOVE	Z,SCORE
	CAML	Z,GOOD
	JRST	WON
	CAMG	Z,BAD
	JRST	LOST
EXIT1:	MOVE	X4,MOVX		;GET BEST TRUNK NUMBER
	MOVE	Z,MOA(X4)
	MOVEM	Z,OA
	MOVE	Z,MOP(X4)
	MOVEM	Z,OP
	MOVE	Z,MOK(X4)
	MOVEM	Z,OK
	MOVE	Z,MORF(X4)
	MOVEM	Z,ORF
	MOVE	Z,MOLF(X4)
	MOVEM	Z,OLF
	MOVE	Z,MOLB(X4)
	MOVEM	Z,OLB
	MOVE	Z,MORB(X4)
	MOVEM	Z,ORB
	MOVE	Z,MOJ(X4)
	MOVEM	Z,OJ
	SKIPE	TREE
	PUSHJ	PDP,TERPRI
	MOVE	U1,MOVES(X4)
	POPJ	PDP,

LOST:	PUSHJ	PDP,PDP16
	MOVEI	U1,[ASCIZ / RESIGNS./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	SETOM	LPFLAG		;JUST TO BE SURE
	RELEAS	2,		;RELEASE LPT (IT MAY HAVE BEEN INITED)
	JRST	BEGIN
WON:	SKIPE	WONFLG#
	JRST	EXIT1
	SETOM	WONFLG
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,PDP16
	MOVEI	U1,[ASCIZ / EXPECTS TO WIN IN /]
	PUSHJ	PDP,PRINT
	MOVE	Z,WIN
	SUB	Z,SCORE
	ADDI	Z,1		;FIX THIS UP TO COUNT RIGHT
	MOVE	U1,Z
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ / MOVES./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	EXIT1
;FINDM FIND FIND1 FIND2 FIND3 FIND4 FIND6 FIND7 FIND8 FIND9


;************************************************************
;   FINDM IS A SUBROUTINE TO SAVE A MOVE IN A FORM SUITABLE *
; FOR TRANSMITTAL TO MOVOUT.                                *
;************************************************************

FINDM:	MOVE	U5,P
	XOR	U5,PLA-1(X3)
	MOVE	Z,U5
	AND	Z,P
	XOR	U5,Z
	PUSHJ	PDP,FIND
	MOVE	U5,Z
	MOVE	Z,U1
	PUSHJ	PDP,FIND
	HRL	U1,Z
	MOVEM	U1,MOVES(X4)
	POPJ	PDP,

;****************************************************
;    FIND IS A SUBROUTINE WHICH LOCATES A BIT IN    *
; REGISTER U5 AND RETURNS A BINARY COUNT OF ITS     *
; CHECKER POSITION IN U1. REGISTER X5 IS USED AND IS*
; NOT RESET.                                        *
;****************************************************

FIND:	SETZB	X5,U1
	ADDI	U1,1
	LSHC	X5,22
	JUMPN	X5,FIND6
	ADDI	U1,20
	LSHC	X5,11
	JUMPN	X5,FIND7
FIND1:	ADDI	U1,10
	LSHC	X5,5
	JUMPN	X5,FIND8
FIND2:	ADDI	U1,4
	LSHC	X5,2
	JUMPN	X5,FIND9
FIND3:	ADDI	U1,2
	LSHC	X5,1
	SKIPN	X5
FIND4:	ADDI	U1,1
	POPJ	PDP,
FIND6:	LSHC	X5,-11
	JUMPE	X5,FIND1
FIND7:	LSHC	X5,-4
	JUMPE	X5,FIND2
FIND8:	LSHC	X5,-2
	JUMPE	X5,FIND3
FIND9:	LSHC	X5,-1
	JUMPE	X5,FIND4
	POPJ	PDP,

;MA MP MK MRF MLF MLB MRB MSKIP ME ME2 MMOVA MMOVP MOVA MOVP MVAA MVPP MOVAA MOVPP MMSKIP GTCNT0 GTCNT PRUC COUNTZ DEPTHZ MOVXZ COUNTX BPTR BPTRO PSKIP BRUSH MOVX TRF TLF TLB TRB TSKIP TE TE2

;***********************************************************
;MAIN IS INDEXED BY TRUNK PLY AND BRANCH
MA:	BLOCK	PSIZE*140		;ACTIVE PIECES
MP:	BLOCK	PSIZE*140		;PASSIVE PIECES
MK:	BLOCK	PSIZE*140		;ALL KINGS
MRF:	BLOCK	PSIZE*140		;RIGHT FOREWARD MOVES
MLF:	BLOCK	PSIZE*140		;LEFT FOREWARD MOVES
MLB:	BLOCK	PSIZE*140		;LEFT BACKWARD MOVES
MRB:	BLOCK	PSIZE*140		;RIGHT BACKWARD MOVES
MSKIP:	BLOCK	PSIZE*140		;SKIPPED MOVES
ME:	BLOCK	PSIZE*140		;HALF EVALUATION
ME2:	BLOCK	PSIZE*140
MMOVA:	BLOCK	PSIZE*140
MMOVP:	BLOCK	PSIZE*140

MOVA:	BLOCK	400
MOVP:	BLOCK	400
MVAA:	BLOCK	20
MVPP:	BLOCK	20
MOVAA:	Z
MOVPP:	Z
MMSKIP:	BLOCK	20

GTCNT0:	Z			;CURRENT REPLY COUNT (FROM 0)
GTCNT:	BLOCK	20		;REPLY COUNTS

	Z
PRUC:	BLOCK	20		;PRUNE COUNT
	0		;GUARD
COUNTZ:	BLOCK	21		;COUNTS FOR EACH TRUNK
DEPTHZ:	BLOCK	20		;DEPTHS FOR EACH TRUNK
MOVXZ:	BLOCK	20		;TRUNK ORDER AS USED
COUNTX:	0			;INDEX TRUNKS FOR COUNTZ
;PATH IS INDEXED BY TRUNK AND PLY IN X2
	Z			;TO ALLOW RAP AROUND
BPTR:	BLOCK	PSIZE*14		;POINTER WITH 8 4-BIT FIELDS
BPTRO:	Z
	Z
PSKIP:	BLOCK	PSIZE*14
	0		;GUARD
BRUSH:	BLOCK	PSIZE*14
MOVX:	Z


;TWIG SPACE IS INDEXED BY BRANCH AND TWIG
TRF:	BLOCK	400
TLF:	BLOCK	400
TLB:	BLOCK	400
TRB:	BLOCK	400
TSKIP:	BLOCK	400
TE:	BLOCK	400
TE2:	BLOCK	400
;OVA OVP OVK OVRF OVLF OVLB OVRB OVSKIP OVE OVE2 OVMOVA OVMOVP FLZZ FLX2 IA IP IK MOA MOP MOK MORF MOLF MOLB MORB MOVES MOJ BPLY BSKIP BZ DEPTHM TIMEX DEPTH U2MAX COUNTM PRUZ SA SP SK STEM FLIT EEBFLF LOADTA LC RFILL DFILL DSAVE

;OV SPACE IS INDEXED BY TRUNK AND NUMBER IN X4
OVA:	BLOCK	140
OVP:	BLOCK	140
OVK:	BLOCK	140
OVRF:	BLOCK	140
OVLF:	BLOCK	140
OVLB:	BLOCK	140
OVRB:	BLOCK	140
OVSKIP:	BLOCK	140
OVE:	BLOCK	140
OVE2:	BLOCK	140
OVMOVA:	BLOCK 	140
OVMOVP:	BLOCK	140


;FLIT SPACE IS INDEXED BY TRUNK IN X1
FLZZ:	BLOCK	20		;BEST ZZ FOR TRUNK AT FLIT TIME
FLX2:	BLOCK	20		;X1 VALUES AT FLIT TIME

;INITIAL BOARD AT START OF TREE SEARCH
IA:	Z
IP:	Z
IK:	Z

;MOVE SPACE FOR ALL INITIAL MOVES
MOA:	BLOCK	20
MOP:	BLOCK	20
MOK:	BLOCK	20
MORF:	BLOCK	20
MOLF:	BLOCK	20
MOLB:	BLOCK	20
MORB:	BLOCK	20
MOVES:	BLOCK	20
MOJ:	BLOCK	20

;BRANCH SPACE INDEXED BY BRANCH IN X4
BPLY:	BLOCK	20
BSKIP:	BLOCK	20
BZ:	BLOCK	20		;INDICATED BRANCH SCORE

DEPTHM:	60
TIMEX:	170		;STANDARD TIME
DEPTH:	3		;STANDARD DEPTH OF 3
U2MAX:	0		;MAX MAIN DEPTH
COUNTM:	0		;REMAINING COUNT
PRUZ:	BLOCK	PSIZE	;PRUNE COMPARE SCORE

	0		;EXTRA GUARD FOR TEMP PURPOSES
SA:	BLOCK	100	;TO SAVE GAME RECORD
SP:	BLOCK	100
SK:	BLOCK	100
	0

STEM:	Z		;TRUNK STEM FLAG
FLIT:	Z		;FLIT FLAG
EEBFLF:	Z		;USED IN TIP

INTERN	LOADTA,DFILL,RFILL,DSAVE,LC
LOADTA:
LC:
RFILL:
DFILL:
DSAVE:	JRST	NOTICE
;PL1 PL2 PL2B PL3 PL4C PL4D PL4A PL4E PL4B PL5 PL5A PL5E PL5B PL1TAB

;**********************************************************
;    PLAUS READS DATA FROM MAIN STORAGE AT MA-10(X1) AND  *
; STARTS WITH X3 AS INDEX SET TO 0,LOOKS AHEAD A VARIBLE  *
; AMOUNT DEPENDING UPON THE NUMBER OF JUMPS ENCOUNTERED,  *
; STORING DATA IN A SPACE DESIGNATED BY A PREFIX PL IN    *
; PLACE OF THE PREFIX M USED FOR MAIN SPACE.              *
; INDEX (X1) CONTAINS TRUNK(3), PLY(4), AND BRANCH(3) IN  *
; THAT ORDER WHILE (X3) CONTAINS PLY(4) ONLY.             *
; ANOTHER INDEX (X2) CONTAINS THE SAME VALUES AS (X1) BUT *
; WITHOUT BRANCH. BOARDS FOUND IN PLAUS WHICH MAY HAVE    *
; TO BE SAVED ARE STORED IN TWIG SPACE AND INDEXED BY (X4)*
;  X4 CONTAINS BRANCH(4) AND TWIG(4)                      *
;    WE ENTER PLAUS INDEXED ONE LEVEL IN PLY BEYOND THE   *
; LEVEL WHERE THE LAST BOARDS HAVE BEEN STORED (-10 SINCE *
; PLY IS MOVED OVER).  X3 IS SET TO ZERO AT THIS LEVEL.   *
;**********************************************************

PL1:	SETZM	PLFLG
	MOVE	U2,X2
	ANDI	U2,PMASK
	MOVE	Z,LOSE
	MOVEM	Z,PRUZ-1(U2)
	MOVE	Z,PRUCT-1(U2)
	MOVEM	Z,PRUC-1(U2)
	MOVE	U1,PLDPT
	CAILE	U2,2
	JRST	.+4
	SKIPE	GTCNT0
	CAIG	U2,1
	MOVE	U1,REPLYD
	HLRZ	Z,PL1TAB(U1)
	MOVEM	Z,TWIGD#
	HRRZ	Z,PL1TAB(U1)
	MOVEM	Z,AFTERD#
	SETZB	X3,X4		;USED FOR PLY AND TWIG IN PLAUS
	MOVE	X1,X2		;RESET X1 FROM X2
	LSH	X1,3		;MAKE SPACE FOR BRANCH NUMBER
PL2:	MOVE	U2,X4
	LSH	U2,-4
	SETZM	MJW-1
	MOVE	A,MA-10(X1)
	MOVEM	A,PLA-1
	MOVE	P,MP-10(X1)
	MOVEM	P,PLP-1
	MOVE	K,MK-10(X1)
	MOVEM	K,PLK-1
	MOVE	Z,MRF-10(X1)
	MOVEM	Z,PLRF-1
	MOVE	Z,MLF-10(X1)
	MOVEM	Z,PLLF-1
	MOVE	Z,MLB-10(X1)
	MOVEM	Z,PLLB-1
	MOVE	Z,MRB-10(X1)
	MOVEM	Z,PLRB-1
	MOVEM	A,MOVAA
	MOVE	U1,MSKIP-10(X1)
	MOVEM	U1,BSKIP(U2)
	ADD	U1,PLY-1(X2)
	MOVEM	U1,PLY(X2)
	MOVEM	U1,BPLY(U2)	;NEWEST BASE PLY
	MOVE	Z,WIN
	SUB	Z,PLY-1(X2)
	MOVEM	Z,BZ(U2)
	XOR	U1,SIDE
	ANDI	U1,1
	SKIPE	TREE
	PUSHJ	PDP,TREM	;GET DATA FROM MAIN
	MOVE	Z,ME-10(X1)
	MOVEM	Z,EEB-1
	MOVE	Z,ME2-10(X1)
	MOVEM	Z,EEB2-1
PL2B:	TRC	U1,1
	MOVEM	U1,COLOR
	MOVE	Z,LOSE
	ADD	Z,PLY(X2)
	MOVEM	Z,ZZ-2
	ADDI	Z,1
	MOVEM	Z,ZZ-1	;START WITH LOSING SCORE IN ZZ
PL3:	PUSHJ	PDP,PUP		;UPDATE USING DATA FROM MAIN
	JRST	PL11		;NO MORE MOVES RETURN
	SKIPE	TREE
	PUSHJ	PDP,TWIGT
PL4C:	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	MOVEM	A,TA(X4)
	MOVEM	P,TP(X4)
	MOVEM	K,TK(X4)
	PUSHJ	PDP,LEGAL	;NORMAL MOVE RETURN, DEFINES TWIG
	JRST	PL13		;NO MOVE RETURN FROM LEGAL
	AOJA	X3,PL4E		;JUMP RETURN
	ADDI	X3,1  		;NORMAL INDEX OF PLY IN PLAUS
PL4D:	MOVE	Z,PLRF-1(X3)
	MOVEM	Z,TRF(X4)
	MOVE	Z,PLLF-1(X3)
	MOVEM	Z,TLF(X4)
	MOVE	Z,PLLB-1(X3)
	MOVEM	Z,TLB(X4)
	MOVE	Z,PLRB-1(X3)
	MOVEM	Z,TRB(X4)
	MOVE	Z,ZZ-3(X3)
	MOVEM	Z,ZZ-1(X3)
	PUSHJ	PDP,PUP		;UPDATE AGAIN TO SEE IF CORRECT PLACE
	JRST	PL4ERR		;TROUBLE,TREAT AS NO MOVE FROM LEGAL
	CAIL	X3,16
	JRST	PL4A		;OUT OF SPACE
	SKIPE	PLRF-1(X3)	;ARE THERE ANY MOVES LEFT?
	JRST	PL4A		;YES SO COMPLETE TWIG SAVE
	SKIPE	PLLF-1(X3)
	JRST	PL4A
	SKIPE	PLLB-1(X3)
	JRST	PL4A
	SKIPN	PLRB-1(X3)	;STILL NOT READY FOR TWIG SAVE
	JRST	PL4C
PL4A:	MOVEM	X3,XTWIG	;COMPLETE TWIG SAVE
	MOVEM	X3,TSKIP(X4)	;SAVE AS SKIP VALUE
	MOVE	Z,EEB-1(X3)
	MOVEM	Z,TE(X4)
	MOVE	Z,EEB2-1(X3)
	MOVEM	Z,TE2(X4)
	TRNN	X3,1
	CAIL	X3,12		;STOP AT TWIG IF X3=10
	CAMGE	X3,TWIGD	;STOP AT TWIG IF G
	JRST	PL5A		;GO ON
	SOJA	X3,PL10Z	;BACK TO EVA

PL4E:	MOVE	Z,EEB-3(X3)
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
	CAIGE	X3,17
	JRST	PL4D
SOJA	X3,PL10Z		;THE BEST THAT CAN BE DONE

PL4B:	CAIL	X3,10
	SOJA	X3,PL5E
 	MOVE	Z,ZZ-3(X3)
	MOVEM	Z,ZZ-1(X3)
PL5:	PUSHJ	PDP,PUP		;UPDATE AFTER TWIG SAVE
	JRST	PL8		;NO MOVE RETURN FROM PUP
PL5A:	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	PUSHJ	PDP,LEGAL	;FIND LEGAL MOVES
	JRST	PL14		;NO MOVES? FIND OUT MEANING
	AOJA	X3,PL5C		;JUMPS SO GO DEEPER
	TRNN	X3,1
	JRST	.+3
	CAMGE	X3,AFTERD	;CAN WE STOP
	AOJA	X3,PL4B		;NO
PL5E:	PUSHJ	PDP,EVA
	CAMG	X3,XTWIG	;IS IT SAFE TO ALPHA PRUNE
	JRST	PL5B
	CAMG	Z,ZZ-2(X3)	;SCORE LEFT IN Z SO ALPHA TEST
	SOJA	X3,PL5		;ALPHA SAYS "PRUNE IT!"
PL5B:	MOVNS	Z		;CHANGE SIGN FOR BETA TEST
	CAMG	Z,ZZ-1(X3)	;NOW TEST
	JRST	PL5
	MOVEM	Z,ZZ-1(X3)	;REPLACE WITH LARGER VALUE
	MOVN	U1,U2SAV
	MOVEM	U1,ZZZ-1(X3)
	JRST	PL5		;TEST NEXT MOVE FROM SAME TWIG

PL1TAB:	1000003
	1000005
	1000007
	3000003
	3000005
	3000007
;PL5C PL8 PL4ERR PL14 PL13 PL13A PL10Z PL10 PL10A

;X3 AT EVA VS REPLY,Y FLIT, STEM AND PLAY SETTINGS
;  X3 AT
;SETTINGS	0	1	2	3	4	5
;ODD TWIG	1	1	1	3	3	3
;EVEN TWIG	10	10	10	10	10	10
;EVEN AFTER	2	2	2	2	2	2
;ODD AFTER	3	5	7	3	5	7

PL5C:	CAIL	X3,16		;CHANGED 11-20-70
	SOJA	X3,PL5E
	MOVE	Z,EEB-3(X3)
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
	JRST	PL4B

PL8:	MOVN	Z,ZZ-1(X3)
	MOVN	U1,ZZZ-1(X3)
	CAMG	X3,XTWIG	;EXHAUSTION BACK-UP BUT WHERE
	JRST	PL10		;MUST BE JUST AT TWIG-SAVE
	CAMG	Z,ZZ-2(X3)	;HOW ABOUT BETA
	SOJA	X3,PL5
	MOVEM	Z,ZZ-2(X3)	;SAVE AS THE LARGER
	MOVEM	U1,ZZZ-2(X3)
	SOJA	X3,PL5		;BACK UP BY ONE IN PLY

PL4ERR:	MOVEI	U1,[ASCIZ /INDEXING ERROR: PL4C./]
	PUSHJ	PDP,PRINT
	JRST	PL13

PL14:	CAMLE	X3,XTWIG	;SAFE TO BACK UP?
	SOJA	X3,PL5		;YES
PL13:	TRNN	X3,1
	JRST	PL13A
	MOVE	Z,LOSE
	ADD	Z,PLY(X2)
	ADD	Z,X3
	JRST	PL10A
PL13A:	MOVE	Z,WIN
	SUB	Z,PLY(X2)
	SUB	Z,X3
	MOVEM	Z,ZZ-1
	SETZM	X3
	JRST	PL11

PL10Z:	PUSHJ	PDP,EVA
	MOVNS	Z
	MOVN	U1,U2SAV
;NOW THE NORMAL EXHAUSTION CASE
PL10:	TRNN	X3,1
	MOVNS	Z
	ADDI	X4,1
	TRNN	X4,17
	SUBI	X4,1		;NO MORE ROOM
PL10A:	CAMG	Z,ZZ-1		;ZZ-1 NOT INDEXED SINCE X3 ALWAYS = 0 HERE
	JRST	.+3
	MOVEM	Z,ZZ-1
	MOVEM	U1,ZZZ-1
	SETZB	X3,TA(X4)
	JRST	PL3		;GO TO NEXT TWIG
;PL16 PL11

;TO GET BOARDS FROM OVERFLOW
PL16:	CAIGE	X4,220
	MOVE	X1,TRUNK
	SKIPG	OVA(X1)		;ARE THERE ANY MORE BOARDS
	JRST	PL17		;NO, SO IT IS TIME TO SORT SCORES
	MOVE	U2,X4
	LSH	U2,-4
	MOVE	A,OVA(X1)
	MOVEM	A,PLA-1
	MOVE	P,OVP(X1)
	MOVEM	P,PLP-1
	MOVE	K,OVK(X1)
	MOVEM	K,PLK-1
	MOVE	Z,OVRF(X1)
	MOVEM	Z,PLRF-1
	MOVE	Z,OVLF(X1)
	MOVEM	Z,PLLF-1
	MOVE	Z,OVLB(X1)
	MOVEM	Z,PLLB-1
	MOVE	Z,OVRB(X1)
	MOVEM	Z,PLRB-1
	MOVEM	A,MOVAA
	MOVE	Z,WIN
	SUB	Z,PLY-1(X2)
	MOVEM	Z,BZ(U2)
	MOVE	U1,OVSKIP(X1)
	MOVEM	U1,BSKIP(U2)
	ADD	U1,PLY-1(X2)
	MOVEM	U1,PLY(X2)
	MOVEM	U1,BPLY(U2)
	XOR	U1,SIDE
	ANDI	U1,1
	SKIPE	TREE
	PUSHJ	PDP,TREOVM	;GET DATA FROM OVERFLOW
	MOVE	Z,OVE(X1)
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,OVE2(X1)
	MOVEM	Z,EEB2-1(X3)
	JRST	PL2B

PL11:	LSH	X4,-4
	MOVE	Z,ZZ-1
	MOVE	U1,ZZZ-1
	MOVE	U2,BSKIP(X4)
	MOVEM	U2,PSKIP-1(X2)
	TRNE	U2,1
	JRST	.+3
	MOVNS	Z
	MOVNS	U1
	MOVEM	Z,BZ(X4)
	MOVEM	U1,BZZ(X4)
	ADDI	X4,1
	MOVE	Z,WIN
	SUB	Z,PLY(X2)
	MOVEM	Z,BZ(X4)
	LSH	X4,4
	SETZB	X3,TA(X4)	; RESET X3 AND STORE STOP
	CAIL	X4,200		;DOES THIS PUT US IN OVERFLOW?
	AOJA	X1,PL16		;YES, SO GET NEXT BOARD THERE
	SKIPE	MA-7(X1)	;IS THERE ANOTHER BRANCH
	AOJA	X1,PL2
;PL17 PL18 PL18D SORT13 TRETM PL17A

PL17:	LSH	X4,-4		;DISCARD TWIG PORTION
	MOVE	U3,BRUSH-1(X2)
	ADD	U3,X4
	MOVEM	U3,BRUSH(X2)
	CAIG	X4,1
	JRST	PL17A		;ONLY ONE MOVE
	CAILE	X4,10		;IS THERE OVERFLOW?
	JRST	PL19		;MERGING NEEDED
	SETZM	BPTRO		;SET AS FLAG
	PUSHJ	PDP,SORT
PL18:	MOVE	X4,BESTM	;NOW MOVE TWIGS
	SUBI	X4,1
	MOVE	U3,X2
	MOVE	U1,PSKIP-2(U3)
	TRNN	U1,1
	SOJA	U3,.-2
	ANDI	U3,PMASK
	MOVE	Z,S-2(U3)
	MOVNM	Z,ZS
	MOVE	U2,X2
	ANDI	U2,PMASK
	CAMLE	U2,U2MAX
	MOVEM	U2,U2MAX
	MOVE	U1,BPLY(X4)
	MOVEM	U1,PLY(X2)
	MOVE	U1,BSKIP(X4)
	MOVEM	U1,PSKIP-1(X2)
	TRNN	U1,1
	MOVE	Z,S-1(U2)
	MOVEM	Z,S(U2)
	SKIPE	TREE
	PUSHJ	PDP,MTRE	;PRINT SELECTED MOVE
	MOVN	Z,BZ(X4)
	CAMGE	Z,GOOD
	JRST	.+7
	MOVE	U1,PLY-1(X2)
	TRNE	U1,1
	JRST	PL17B
	SKIPE	FLIT
	JRST	PL17C
	JRST	PL17D
	MOVE	U2,X2
	ANDI	U2,PMASK
	CAMLE	U2,WIDTH
	SKIPN	FLIT
	JRST	PL18D
	SKIPN	STEM
	JRST	PL18D
	MOVE	U1,BSKIP(X4)
	CAIL	U1,2
	JRST	PL18D
	MOVE	U3,BRUSH(X2)
	LSH	U3,1
	CAMGE	U3,DEPTHM
	JRST	PL18D
	CAMG	Z,S-1(U2)
	JRST	SET9A
	CAML	Z,ZS
	JRST	SET9
PL18D:	LSH	X4,4		;ALLOW FOR TWIGS (4 BITS)
	MOVE	X1,X2
	LSH	X1,3		;MAKE SPACE HERE ALSO
	MOVEI	U1,10		;COUNT BRANCHES STORED IN MAIN
SORT13:	MOVE	U2,TA(X4)
	MOVEM	U2,MA(X1)	;THIS IS THE CORRECT LEVEL
	JUMPE	U2,SORT16	;LAST TWIG HAS BEEN STORED
	MOVE	U2,TK(X4)
	MOVEM	U2,MK(X1)
	MOVE	U2,TP(X4)
	MOVEM	U2,MP(X1)
	MOVE	U2,TRF(X4)
	MOVEM	U2,MRF(X1)
	MOVE	U2,TLF(X4)
	MOVEM	U2,MLF(X1)
	MOVE	U2,TLB(X4)
	MOVEM	U2,MLB(X1)
	MOVE	U2,TRB(X4)
	MOVEM	U2,MRB(X1)
	MOVE	U2,TSKIP(X4)
	MOVEM	U2,MSKIP(X1)
	MOVE	U2,TE(X4)
	MOVEM	U2,ME(X1)
	MOVE	U2,TE2(X4)
	MOVEM	U2,ME2(X1)
	SKIPE	TREE
	PUSHJ	PDP,TRETM	;FROM TWIG TO MAIN
	ADDI	X4,1
	SOJLE	U1,SORT14	;STOP IF MAIN IS FILLED
	AOJA	X1,SORT13	;GET NEXT TWIG

TRETM:	MOVE	U2,MOVA(X4)
	MOVEM	U2,MMOVA(X1)
	MOVE	U2,MOVP(X4)
	MOVEM	U2,MMOVP(X1)
	POPJ	PDP,

PL17A:	JUMPE	X4,PL17B	;NONE ACCEPTABLE
	MOVEM	X4,BESTM
	SETZM	BPTR-1(X2)
	JRST	PL18
;PL17B PL17D PL17C TREM TREOVM SORT14 SORT15 TREOV

PL17B:	SKIPE	FLIT		;ARE WE FLITTING
	JRST	PL17C		;NO
	MOVE	U1,PLY-1(X2)
	TRNE	U1,1
	JRST	.+4
	MOVE	Z,ZZ-1
	MOVEM	Z,FLITZ
	JRST	SRT16Y		;BAD TRUNK SO DISCARD
PL17D:	SETOM	FLIT		;STOP IN THIS CASE
	MOVE	U1,COUNT
	MOVEM	U1,COUNTZ
	SUB	U1,COUNTM
	MOVNM	U1,COUNTM	;REMAINING COUNT
	MOVE	U1,DEPTH
	MOVEM	U1,DEPTHZ
	SETZM	DEPTHZ+1
	SETZM	COUNTZ+1
	SETZM	COUNTX
	MOVE	U1,STEMD
	MOVEM	U1,PLDPT
PL17C:	MOVE	U2,X2
	ANDI	U2,PMASK
	MOVN	Z,BZ(X4)
	CAMLE	Z,S-1(U2)
	JRST	SET9
	JRST	SET9A


TREM:	MOVE	U2,X4
	LSH	U2,-4
	MOVE	Z,MMOVA-10(X1)
	MOVEM	Z,MVAA(U2)
	MOVE	Z,MMOVP-10(X1)
	MOVEM	Z,MVPP(U2)
	MOVE	Z,MSKIP-10(X1)
	MOVEM	Z,MMSKIP(U2)
	POPJ	PDP,

TREOVM:	MOVE	U2,X4
	LSH	U2,-4
	MOVE	Z,OVMOVA(X1)
	MOVEM	Z,MVAA(U2)
	MOVE	Z,OVMOVP(X1)
	MOVEM	Z,MVPP(U2)
	MOVE	Z,OVSKIP(X1)
	MOVEM	Z,MMSKIP(U2)
	POPJ	PDP,

;WE MUST PUT THE REST IN THE OVERFLOW REGION
SORT14:	MOVE	U1,TRUNK
	MOVEI	U3,10
SORT15:	MOVE	U2,TA(X4)
	MOVEM	U2,OVA(U1)
	JUMPE	U2,SORT16	;LAST TWIG
	MOVE	U2,TP(X4)
	MOVEM	U2,OVP(U1)
	MOVE	U2,TK(X4)
	MOVEM	U2,OVK(U1)
	MOVE	U2,TRF(X4)
	MOVEM	U2,OVRF(U1)
	MOVE	U2,TLF(X4)
	MOVEM	U2,OVLF(U1)
	MOVE	U2,TLB(X4)
	MOVEM	U2,OVLB(U1)
	MOVE	U2,TRB(X4)
	MOVEM	U2,OVRB(U1)
	MOVE	U2,TSKIP(X4)
	MOVEM	U2,OVSKIP(U1)
	MOVE	U2,TE(X4)
	MOVEM	U2,OVE(U1)
	MOVE	U2,TE2(X4)
	MOVEM	U2,OVE2(U1)
	SKIPE	TREE
	PUSHJ	PDP,TREOV	;FROM TWIG TO OVERFLOW
	ADDI	X4,1
	SOJLE	U3,SORT16
	AOJA	U1,SORT15	;GET NEXT ONE

TREOV:	MOVE	U2,MOVA(X4)
	MOVEM	U2,OVMOVA(U1)
	MOVE	U2,MOVP(X4)
	MOVEM	U2,OVMOVP(U1)
	POPJ	PDP,
;SORT16 SRT16Y SRT16Z SRT16X SRT16E SRT16F

;ALL TWIGS HAVE BEEN SAVED 
SORT16:	ADDI	X2,1		;INDEX TO NEXT LEVEL
	SKIPE	FLIT
	JRST	SRT16E
	MOVE	U1,PLY-1(X2)
	TRNN	U1,1
	JRST	SRT16E
	SETZM	GETF3
	MOVE	X4,BESTM
	MOVN	Z,BZ-1(X4)
	MOVN	U3,BZZ-1(X4)
	MOVE	U1,BSKIP-1(X4)
	TRNE	U1,1		;EVEN SKIP
	JRST	.+3
	MOVNS	Z		;YES
	MOVNS	U3
	MOVEM	Z,FLITZ#
	CAML	Z,[-2000000]
	JRST	SRT16Z
SRT16Y:	SKIPN	TREE
	JRST	.+5
	MOVEI	U1,[ASCIZ /  BAD TRUNK /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,2
	ADDM	U1,TREEX
	SKIPN	U5,ORDER
	JRST	EXIT
	SETZ	X5,
	LSHC	X5,4
	JRST	SORT2A
SRT16Z:	MOVE	U2,X2
	LSH	U2,-PSHIFT
	ADDI	U2,1
	MOVEM	X2,FLX2-1(U2)
	MOVEM	Z,FLZZ-1(U2)
	ADD	U3,[262626262626]
	MOVSM	U3,FLZZZ-1(U2)
	EXCH	Z,BEST
	CAMN	Z,WIN
	JRST	SRT16D		;MUST TRY ALL TRUNKS
	SKIPE	GETF1
	JRST	SRT16C		;WOOPS STILL MORE TRUNKS
	SKIPE	COUNTZ
	JRST	SRT16X
	MOVE	U1,COUNT
	MOVEM	U1,COUNTZ
	MOVE	U5,COUNTM
	SUB	U5,COUNT
	MOVEM	U5,COUNTM
	MOVE	U1,DEPTHM
	MOVEM	U1,DEPTHZ
	MOVEI	U3,4
	CAML	U5,COUNT
	JRST	.+5
	IMULI	U5,5
	LSH	U5,-2
	MOVNS	U3
	CAMG	U5,COUNT
	ADD	U1,U3
	MOVEM	U1,DEPTHM
	SETZM	DEPTHZ+1
	SETZM	COUNTZ+1
SRT16X:	SETZM	COUNTX
	MOVE	U1,STEMD
	MOVEM	U1,PLDPT
	CAMLE	Z,BEST		;STILL EXCHANGED, REMEMBER?
	JRST	SRT16D		;SHOULD STILL SWAP
	EXCH	Z,BEST		;RESTORE BEST
SRT16E:	MOVE	Z,EEB-1
	MOVEM	Z,EEB-2		;BACKUP PREPARE
	MOVE	Z,EEB2-1
	MOVEM	Z,EEB2-2
SRT16F:	MOVE	U2,X2
	ANDI	U2,PMASK
	JUMPE	U2,TIP		;OUT OF SPACE
	MOVE	Z,BEST
	CAMN	Z,WIN
	JRST	PL1		;KEEP GOING IN THIS CASE
	CAMG	U2,WIDTH
	JRST	PL1
	MOVE	U1,PLY-1(X2)
	CAIL	U1,20
	JRST	TIP
	MOVE	U1,BRUSH-1(X2)
	CAML	U1,DEPTHM
	JRST	TIP
	JRST	PL1
;SRT16C SRT16D SORT17 SORT18 SORT19 SORT20 SORT21 SORT2A SORT22

SRT16C:	SETOM	GETF3
SRT16D:	EXCH	Z,BEST		;RESTORE Z
	MOVE	U3,ORDER	;FIRST, MERGE ORDER
	SETZB	X3,U5
SORT17:	LSHC	X3,4
	JUMPE	X3,SORT18
	CAMLE	Z,FLZZ-1(X3)
	JRST	SORT18
	LSH	U5,4
	IOR	U5,X3
	SETZM	X3
	JRST	SORT17
SORT18:	LSH	U5,4
	IOR	U5,U2
SORT19:	JUMPE	X3,SORT20
	LSH	U5,4
	IOR	U5,X3
	SETZM	X3
	LSHC	X3,4
	JRST	SORT19
SORT20:	SKIPN	GETF3		;ARE THERE OVERFLOW TRUNKS?
	JRST	SORT21		;NO, SO GO AHEAD ANYWAY
	MOVE	X4,U5		;REPLACE POOREST TRUNK
	ANDI	X4,17		;SAVE POOREST POINTER
	XOR	U5,X4		;DELETE FROM ORDER
	MOVEM	X4,X4S		;SAVE
	SETZM	X5
	LSHC	X5,4
	JUMPE	X5,.-1		;LEFT JUSTIFY
	MOVE	Z,FLX2-1(X5)
	MOVEM	Z,BEST		;RESET BEST AFTER MERGE
	LSHC	X5,-4
	MOVEM	U5,ORDER
	SKIPE	TREE
	PUSHJ	PDP,RETREE
	MOVEI	X3,1
	MOVE	U1,SIDE
	MOVEM	U1,COLOR
	MOVE	A,PLAS		;FIX UP TO GET NEXT TRUNK
	MOVEM	A,PLA-1(X3)
	MOVE	P,PLPS
	MOVEM	P,PLP-1(X3)
	MOVE	K,PLKS
	MOVEM	K,PLK-1(X3)
	MOVE	PLSKS
	MOVEM	PLSKIP-1(X3)
	MOVE	Z,PLRFS
	MOVEM	Z,PLRF-1(X3)
	MOVE	Z,PLLFS
	MOVEM	Z,PLLF-1(X3)
	MOVE	Z,PLLBS
	MOVEM	Z,PLLB-1(X3)
	MOVE	Z,PLRBS
	MOVEM	Z,PLRB-1(X3)
	MOVE	Z,PLMJS
	MOVEM	Z,MJW-1(X3)
	SETOM	GETF2
	SUBI	X4,1
	PUSHJ	PDP,GET		;GET NEW TRUNK
	SKIPE	TREE
	PUSHJ	PDP,TERPRI
	SUBI	X4,1
	JRST	PLAY2

SORT21:	SETZ	X5,
	LSHC	X5,4
	JUMPE	X5,.-1		;LEFT JUSTIFY AND STRIP OFF BEST
SORT2A:	MOVEM	U5,ORDER
	MOVE	X2,FLX2-1(X5)
	MOVE	X4,X2
	TRNN	X4,PMASK
	SUBI	X4,PSIZE
	LSH	X4,3-PSHIFT
	TRZ	X4,7
	MOVEM	X4,TRUNK	;NEW VALUE
	SKIPE	TREE
	PUSHJ	PDP,FLTREE
	SETZ	X5,
	LSHC	X5,4
	MOVE	Z,FLZZ-1(X5)
	MOVEM	Z,BEST
	SKIPN	U5,ORDER2
	JRST	SORT22
	CAML	Z,BEST2
	JRST	SORT22
	EXCH	Z,BEST2
	MOVEM	Z,BEST
	EXCH	U5,ORDER
	MOVEM	U5,ORDER2
SORT22:	TRNN	X2,PMASK
	JRST	TIP
	MOVE	U1,BRUSH-1(X2)
	CAML	U1,DEPTHM
	JRST	TIP
	JRST	PL1
;PL19 PL20 PL21 PL22 MERGE MERGE2 MERGE3 MERGE4 MERGE5 MERGE6 MERGE7 MERGE8 MERGE9 MERG12 TREMRG

PL19:	MOVEM	X4,X4S
	CAIE	X4,11
	JRST	PL20
	MOVEM	X4,BESTO	;NO SECOND SORT NEEDED
	SETZM	BPTRO
	JRST	PL21
PL20:	PUSHJ	PDP,SORT	;SORT OVERFLOW
	MOVEM	X3,BESTO	;SAVE OVERFLOW SORT RESULTS
	MOVEM	U3,BPTRO	;SAVE OVERFLOW POINTER
PL21:	MOVEI	X4,10
	PUSHJ	PDP,SORT
	MOVE	U1,BESTO	;BEST OVERFLOW POINTER
	MOVE	Z,BZ-1(U1)	;OVERFLOW BEST Z
	MOVE	U2,WORSTM
	CAMLE	Z,BZ-1(U2)	;COMPARE WITH MAIN WORST
	JRST	PL18		;OVERFLOW CAN BE DISCARDED
	MOVE	X4,BESTM
	CAMLE	Z,BZ-1(X4)	;IS OVERFLOW BEST REALLY BEST?
	JRST	PL22		;NO, TOO BAD, MORE WORK AHEAD
	LSHC	X3,-4		;YES, PUT MAIN BEST BACK ON LIST
	MOVEM	U3,BPTR-1(X2)
	MOVE	X4,U1		;PREPARE TO SAVE TWIGS
	MOVEM	U1,BESTM	;CALL THIS BESTM NOW
	JRST	MERGE		;GO ON FROM HERE
PL22:	MOVE	X3,U1		;RESTORE BESTO TO ITS LIST
	MOVE	U3,BPTRO
	LSHC	X3,-4
	MOVEM	U3,BPTRO

MERGE:	MOVE	U3,BPTR-1(X2)	;GET BEST 8 TO SAVE
	MOVE	U5,BPTRO
	JUMPE	U5,PL18
	SETZB	X3,X5
	SETZB	Q,A
	MOVEI	U1,7		;SAVE ONLY 7 MORE
	LSHC	X5,4
	LSHC	X3,4
MERGE2:	MOVE	Z,BZ-1(X5)
MERGE3:	JUMPE	X5,MERGE4	;DON'T SORT IF THERE ARE NO MORE
	CAMG	Z,BZ-1(X3)	;GIVE PREFERENCE TO MAIN
	JRST	MERGE6
MERGE4:	IOR	A,X3
	LSH	A,4
	MOVEI	X3,0
	LSHC	X3,4
	SOJG	U1,MERGE3
MERGE5:	LSH	A,4
	JUMPN	Q,MERGE7
	MOVEM	A,BPTR-1(X2)
	JRST	PL18
MERGE6:	IOR	A,X5
	LSH	A,4
	IOR	Q,X5
	MOVEI	X5,0
	LSHC	X5,4
	SOJLE	U1,MERGE5
	JUMPN	X5,MERGE2
	JRST	MERGE4
MERGE7:	MOVE	U5,A
	MOVEI	U1,7
	MOVEI	A,0
MERGE8:	MOVEI	X5,0
	LSHC	X5,4
	CAILE	X5,10
	JRST	MERG12
	IOR	A,X5
	LSH	A,4
	SOJG	U1,MERGE8
MERGE9:	LSH	A,4
	MOVEM	A,BPTR-1(X2)
	JRST	PL18

MERG12:	IOR	A,X3
	LSH	A,4
	SUBI	X3,1
	SUBI	X5,11		;FORM FOR OVERFLOW SPACE
	MOVE	X1,X2
	LSH	X1,3
	IOR	X1,X3
	IOR	X5,TRUNK	;GET PROPER TRUNK OVERFLOW NUMBER
	MOVE	U2,OVA(X5)	;MOVE DATA FROM OVERFLOW TO MAIN
	MOVEM	U2,MA-10(X1)
	MOVE	U2,OVP(X5)
	MOVEM	U2,MP-10(X1)
	MOVE	U2,OVK(X5)
	MOVEM	U2,MK-10(X1)
	MOVE	U2,OVRF(X5)
	MOVEM	U2,MRF-10(X1)
	MOVE	U2,OVLF(X5)
	MOVEM	U2,MLF-10(X1)
	MOVE	U2,OVLB(X5)
	MOVEM	U2,MLB-10(X1)
	MOVE	U2,OVRB(X5)
	MOVEM	U2,MRB-10(X1)
	MOVE	U2,OVSKIP(X5)
	MOVEM	U2,MSKIP-10(X1)
	MOVE	U2,OVE(X5)
	MOVEM	U2,ME-10(X1)
	MOVE	U2,OVE2(X5)
	MOVEM	U2,ME2-10(X1)
	SKIPE	TREE
	PUSHJ	PDP,TREMRG
	MOVEI	X3,0
	LSHC	X3,4
	SOJG	U1,MERGE8
	JRST	MERGE9

TREMRG:	MOVE	U2,OVMOVA(X5)
	MOVEM	U2,MMOVA-10(X1)
	MOVE	U2,OVMOVP(X5)
	MOVEM	U2,MMOVP-10(X1)
	POPJ	PDP,
;SETUPA SETUPB SORT SORTA SORT1 SORT2 SORT3 SORT4 SORT5 SORT6 SORT7 SORT8

;*********************************************
;   SORT IS A ROUTINE THAT SORTS  INDEXES    *
; REFERENCING DATA ARRANGING IN ASSENDING    *
; ORDER THE TAGS CONTAINED IN BZ-1. IT DOES  *
;THIS BY SIMULATING A 4 TAPE SORT IN 4       *
; REGISTERS.                                 *
;*********************************************
SETUPA:	BYTE	(4)0
	BYTE	(4)1
	BYTE	(4)1
	BYTE	(4)1,2
	BYTE	(4)1,2
	BYTE	(4)1,2,3
	BYTE	(4)1,2,3
	BYTE	(4)1,2,3,4
	BYTE	(4)1,2,3,4
	BYTE	(4)11
	BYTE	(4)11
	BYTE	(4)11,12
	BYTE	(4)11,12
	BYTE	(4)11,12,13
	BYTE	(4)11,12,13
	BYTE	(4)11,12,13,14
	BYTE	(4)11,12,13,14
	
SETUPB:	BYTE	(4)0
	BYTE	(4)0
	BYTE	(4)2
	BYTE	(4)3
	BYTE	(4)3,4
	BYTE	(4)4,5
	BYTE	(4)4,5,6
	BYTE	(4)5,6,7
	BYTE	(4)5,6,7,10
	BYTE	(4)0
	BYTE	(4)12
	BYTE	(4)13
	BYTE	(4)13,14
	BYTE	(4)14,15
	BYTE	(4)14,15,16
	BYTE	(4)15,16,17
	BYTE	(4)15,16,17	;HANDLES ONLY 15


SORT:	MOVE	U3,SETUPA(X4)	;SET UP INPUT REGISTERS
	MOVE	U5,SETUPB(X4)
	SETZB	X3,X5		;ZERO SAMPLING REGISTERS
	SETZB	A,K		;ZERO OUTPUT REGISTERS
	LSHC	X3,4
	LSHC	X5,4
SORTA:	MOVE	Z,BZ-1(X3)
	CAMG	Z,BZ-1(X5)	;FIND SMALLEST
	JRST	SORT1
	EXCH	U3,U5		;SWAP IF NECESSARY
	EXCH	X3,X5
SORT1:	MOVE	Q,X3
	LSH	A,4		;MAKE ROOM
	IOR	A,X3
	SETZ	X3,
	JUMPE	U3,SORT5	;NO MORE ON U3, USE U5
	LSHC	X3,4		;GET NEXT ENTRY
	MOVE	Z,BZ-1(X3)
	CAMG	Z,BZ-1(X5)
	JRST	SORT2
	EXCH	X3,X5
	EXCH	U3,U5		;MUST SWITCH BOTH
SORT2:	MOVE	Z,BZ-1(Q)	;WILL IT GO
	CAMG	Z,BZ-1(X3)
	JRST	SORT1		;YES
	CAMLE	Z,BZ-1(X5)	;MAYBE X5 WILL GO
	JRST	SORT6		;NO, SO SWITCH OUTPUTS
SORT3:	MOVE	Q,X5		;YES, MOVE X5 AND STICK WITH THIS INPUT
	LSH	A,4		;MAKE ROOM
	IOR	A,X5
	SETZ	X5,
	JUMPN	U5,SORT4	;ARE THER MORE
	JUMPE	X3,SORT7	;END OF PASS
	EXCH	X3,X5
	EXCH	U3,U5		;SWITCH INPUTS
	EXCH	A,K		;SWITCH OUTPUTS
	JRST	SORT3		;START WITH ONE
SORT4:	LSHC	X5,4
SORT5:	MOVE	Z,BZ-1(Q)
	CAMG	Z,BZ-1(X5)
	JRST	SORT3		;CONTINUE WITH U5
SORT6:	EXCH	A,K		;SWITCH OUTPUTS
	JUMPN	X3,SORT1	;CONTINUE FROM U3
	JRST	SORT3
SORT7:	JUMPE	K,SORT8	;EVERYTHING IS ON A
	EXCH	U3,A		;INTERCHANGE IN AND OUT
	EXCH	U5,K
	LSHC	X3,4
	JUMPE	X3,.-1		;LEFT JUSTIFY AND  GET FIRST IN X3
	LSHC	X5,4
	JUMPE	X5,.-1		;DITTO
	JRST	SORTA		;GO AROUND AGAIN
SORT8:	MOVE	U3,A
	JUMPE	U3,.+3
	LSHC	X3,4
	JUMPE	X3,.-1		;LEFT JUSTIFY
	MOVEM	X3,BESTM	;SAVE INDEX TO BEST
	ANDI	A,17
	MOVEM	A,WORSTM	;SAVE INDEX TO WORST
	MOVEM	U3,BPTR-1(X2)
	POPJ	PDP,


;TIP TIP1 TIP1A TIP1B TIP1C TIP1D TIP3 TIP4

;*****************************************************
;   TIP IS A PART OF THE MAIN ROUTINE WHICH HANDLES  *
; TIPPING OFF OF A BRANCH. IT IS SIMILAR TO PLAUS IN *
; INPUT REQUIREMENTS BUT IT TRANSFERS CONTROL TO SET.*
;*****************************************************
TIP:	SETOM	FLIT		;STOP FLITTING
	SETZM	BUFFFF#
	SETZB	X3,X4
	MOVE	X1,X2		;PREPARE TO GET BOARD
	LSH	X1,3		;START AT FIRST BRANCH
	SKIPA
TIP1:	AOS	X4
	SETZM	MJW-1
	CAIGE	X4,10		;ARE WE USING BOARDS FROM OVERFOLW
	JRST	TIP1A		;NO, SO GET BOARD FROM MAIN
	CAIG	X4,10
	MOVE	X1,TRUNK	;FIRST TIME IN OVERFLOW
	SKIPG	OVA(X1)
	JRST	SET10		;NO MORE BOARDS
	SKIPE	TREE
	PUSHJ	PDP,TIPTOV
	MOVE	U2,OVSKIP(X1)
	MOVE	U1,OVE2(X1)
	MOVE	Z,OVE(X1)
	JRST	TIP1B
TIP1A:	SKIPG	MA-10(X1)
	JRST	SET10		;NO MORE BOARDS
	SKIPE	TREE
	PUSHJ	PDP,TIPT
	MOVE	U2,MSKIP-10(X1)
	MOVE	U1,ME2-10(X1)
	MOVE	Z,ME-10(X1)
TIP1B:	MOVEM	U2,TISKIP
	ADD	U2,PLY-1(X2)
	MOVEM	U2,TIPPLY#	;PLY IN X2 MAY OVERFLOW
	XOR	U2,SIDE
	ANDI	U2,1
	SETZM	EEBFLF
	MOVEM	U1,EEB2-1(X3)
	MOVEM	Z,EEB-1(X3)
	MOVE	U1,TISKIP
	TRC	U2,1
	MOVEM	U2,COLOR
	MOVE	U2,X2
	ANDI	U2,PMASK
	SKIPN	U2
	ADDI	U2,PSIZE	;OVERFLOW IS POSSIBLE
	MOVEM	U2,U2S		;NEEDED IN TIP7
	MOVE	Z,S-1(U2)
	TRNN	U1,1		;U1 CONTAINS PROPER SKIP
	JRST	TIP1C
	MOVEM	Z,ZZ-2(X3)
	MOVE	U2,X2
	MOVE	U1,PSKIP-2(U2)
	TRNN	U1,1
	SOJA	U2,.-2
	ANDI	U2,PMASK
	SKIPN	U2
	ADDI	U2,PSIZE
	MOVEM	U2,U2SS		;NEEDED IN TIP7
	MOVE	Z,S-2(U2)
	MOVEM	Z,ZZ-1(X3)
	JRST	TIP1D
TIP1C:	MOVEM	Z,ZZ-1(X3)
	MOVE	U2,X2
	MOVE	U1,PSKIP-2(U2)
	TRNN	U1,1
	SOJA	U2,.-2
	ANDI	U2,PMASK
	SKIPN	U2
	ADDI	U2,PSIZE
	MOVEM	U2,U2SS
	MOVE	Z,S-2(U2)
	MOVEM	Z,ZZ-2(X3)
TIP1D:	CAIGE	X4,10		;TEST AGAIN
	JRST	TIP3
	PUSHJ	PDP,OVUP
	JRST	TIP7
	JRST	TIP4

TIP3:	PUSHJ	PDP,MUP	
	JRST	TIP7		;NO MORE MOVES
TIP4:	SKIPE	TREE
	PUSHJ	PDP,TIPT2
	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	PUSHJ	PDP,LEGAL
	JRST	TIP8		;NO LEGAL MOVES
	AOJA	X3,TIP4A
	TRNN	X3,1
	SETOM	EEBFLF
	AOJA	X3,TIP5
;TIP4A TIP5 TIP5A TIP5E TIP5C TIP5B TIP6 TIP6A TIP6B TIP7 TIP7A TIP8 TIP10

TIP4A:	MOVE	Z,EEB-3(X3)
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
	CAIL	X3,10
	SOJA	X3,TIP5E
TIP5:	MOVE	Z,ZZ-3(X3)
	MOVEM	Z,ZZ-1(X3)
TIP5A:	PUSHJ	PDP,PUP
	JRST	TIP6		;NO MORE MOVES
	SKIPE	TREE
	PUSHJ	PDP,TIPT3
	MOVEM	A,PLA(X3)
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	PUSHJ	PDP,LEGAL
	JRST	TIP10		;NO LEGAL MOVE
	AOJA	X3,TIP4A		;JUMP MOVE
	TRNN	X3,1
	SETOM	EEBFLF
	CAIL	X3,6
	JRST	TIP5E
	SKIPN	EEBFLF
	AOJA	X3,TIP5		;MUST FIND NECESSARY EV
TIP5E:	PUSHJ	PDP,EVA		;NOW A FULL FINAL EVAL
TIP5C:	SKIPE	TREE
	PUSHJ	PDP,TREEMP
	MOVM	U5,Z
	CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
	JRST	.+7
	LSH	U5,-4		;DIVIDE BY 16
	MOVNS	U5
	ADD	U5,Z
	CAMLE	U5,ZZ-2(X3)
	JRST	TIP5B
	JRST	.+3
	CAMLE	Z,ZZ-2(X3)	;DOES ALPHA LIKE?
	JRST	TIP5B		;YES
	SOJG	X3,TIP5A	;NO, SO CAN WE PUP?
	JRST	TIP1D		;NO, MUST MUP
TIP5B:	MOVNS	Z		;MUST CHANGE SIGN TO COMPARE WITH BETA
	CAMLE	Z,ZZ-1(X3)	;DOES BETA LIKE?
	MOVEM	Z,ZZ-1(X3)	;YES, SO WE GET NEW BETA
	JRST	TIP5A		;AND TRY A NEW BRANCH

TIP6:	MOVE	Z,ZZ-1(X3)
	SUBI	X3,1		;CAN BACK 1 AT LEAST
	MOVM	U5,Z
	CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
	JRST	.+7
	LSH	U5,-4		;DIVIDE BY 16
	MOVNS	U5
	ADD	U5,Z
	CAMG	U5,ZZ-2(X3)
	JRST	TIP6A
	JRST	.+3
	CAMG	Z,ZZ-2(X3)	;CAN WE PRUNE?
	JRST	TIP6A		;YES, ALPHA  DOES NOT LIKE
	MOVNS	Z
	CAMLE	Z,ZZ-1(X3)	;DOES BETA LIKE?
	MOVEM	Z,ZZ-1(X3)	;YES
	JUMPG	X3,TIP5A	;GO TO PUP IF X3 > 0
	JRST	TIP1D		;ELSE GO TO MUP
TIP6A:	JUMPG	X3,TIP6B
	MOVE	U1,TISKIP
	TRNE	U1,1
	AOJA	X1,TIP1
	MOVE	U1,PSKIP-2(X2)
	TRNN	U1,1
	SOJA	X2,.-2
	JRST	SET

TIP6B:	SOJG	X3,TIP5A
	JRST	TIP1D



;AFTER MUP EXHAUSTION
TIP7:	MOVE	Z,ZZ-1(X3)
	MOVE	U1,TISKIP
	TRNN	U1,1
	MOVNS	Z
	MOVE	U2,U2SS
	MOVM	U5,Z
	CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
	JRST	.+7
	LSH	U5,-4		;DIVIDE BY 16
	MOVNS	U5
	ADD	U5,Z
	CAMLE	U5,S-2(U2)
	JRST	TIP7A
	JRST	.+3
	CAMLE	Z,S-2(U2)
	JRST	TIP7A
	TRNN	X2,PMASK
	SUBI	X2,1		;PLY OVERFLOW CASE
	ANDI	X2,PSIZE*20-PSIZE	;ALPHA WANTS NEW SET
	ADD	X2,U2		;U2 MAY BE 10
	JRST	SET
TIP7A:	MOVNS	Z
	MOVE	U2,U2S
	CAMLE	Z,S-1(U2)
	MOVEM	Z,S-1(U2)
	AOJA	X1,TIP1

TIP8:	MOVE	Z,LOSE
	ADD	Z,TIPPLY
	ADD	Z,X3
	SKIPE	TREE
	PUSHJ	PDP,TREES
	MOVNM	Z,ZZ-1(X3)
	JRST	TIP7

TIP10:	MOVE	Z,LOSE
	ADD	Z,TIPPLY
	ADD	Z,X3
	JRST	TIP5C
;SETT3 SETT5 TWIGT TIPTOV TIPT TIPT2 TIPT3 MAS

SETT3:	MOVE	Z,MOVAA
	MOVEM	Z,MMOVA(X1)
	MOVE	Z,MOVPP
	MOVEM	Z,MMOVP(X1)
	POPJ	PDP,

SETT5:	MOVE	Z,MOVAA
	MOVEM	Z,OVMOVA(X1)
	MOVE	Z,MOVPP
	MOVEM	Z,OVMOVP(X1)
	POPJ	PDP,

TWIGT:	MOVE	Z,MOVAA
	MOVEM	Z,MOVA(X4)
	MOVEM	P,MOVP(X4)
	POPJ	PDP,

TIPTOV:	MOVE	U3,OVSKIP(X1)
	MOVE	U5,OVMOVA(X1)
	MOVE	U4,OVMOVP(X1)
	MOVE	U2,PLY-1(X2)
	MOVEI	U1,[ASCIZ /:/]
	MOVEM	U1,DOTFLG
	JRST	TRESTR

TIPT:	MOVE	U3,MSKIP-10(X1)
	MOVE	U5,MMOVA-10(X1)
	MOVE	U4,MMOVP-10(X1)
	MOVE	U2,PLY-1(X2)
	MOVEI	U1,[ASCIZ /;/]
	MOVEM	U1,DOTFLG
	JRST	TRESTR

TIPT2:	SKIPE	X3
	POPJ	PDP,
	MOVE	U5,MOVAA
	MOVE	U4,P
	MOVE	U2,TIPPLY
	MOVEI	U3,1
	MOVEI	U1,[ASCIZ / /]
	TRNE	U2,1
	MOVEI	U1,[ASCIZ /,/]
	MOVEM	U1,DOTFLG
	JRST	TRESTR

TIPT3:	MOVE	U5,PLA-1(X3)
	MOVE	U4,P
	MOVE	U2,TIPPLY
	ADD	U2,X3
	MOVEI	U3,1
	MOVEI	U1,[ASCIZ / /]
	TRNE	U2,1
	MOVEI	U1,[ASCIZ /,/]
	MOVEM	U1,DOTFLG
	JRST	TRESTR

MAS:	Z
;GTREE STREE FLTREE TRTRE

GTREE:	MOVEI	U1,[ASCIZ / /]
	MOVEM	U1,DOTFLG
	MOVE	U5,IA
	MOVE	U4,MOP(X4)
	MOVEI	U2,0
	MOVEI	U3,1
	PUSHJ	PDP,TREE1
	MOVEI	U1,[ASCIZ /  TRUNK NUMBER /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X4
	ADDI	U1,1
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	SETZM	BUFFF2
	MOVEI	U1,20
	MOVEM	U1,TREEX
	POPJ	PDP,


STREE:	MOVE	U5,MMOVA-10(X1)
	MOVE	U4,MMOVP-10(X1)
	MOVE	U2,PLY-1(X2)
	MOVE	U3,MSKIP-10(X1)
	MOVEI	U1,[ASCIZ / /]
	TRNE	U2,1
	MOVEI	U1,[ASCIZ /,/]
	MOVEM	U1,DOTFLG
	JRST	TREE1

FLTREE:	SETOM	PRFLG
	MOVEI	U1,[ASCIZ /,/]
	MOVEM	U1,DOTFLG
	MOVEI	U1,[ASCIZ /   FLIT TO TRUNK /]
	PUSHJ	PDP,PRINT
	LSH	X4,-3
	ADDI	X4,1
	MOVE	U1,X4
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,3
	ADDM	U1,TREEX
	MOVN	Z,FLITZ
	SETZ	X3,
	MOVE	U1,LOSE
	MOVEM	U1,ZZ-1(X3)
	MOVEM	U1,ZZ-2(X3)
	JRST	TREES

TRTRE:	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /  GOING TO TRUNK /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X1
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,40
	MOVEM	U1,TREEX
	POPJ	PDP,
;RETREE TREES TREES2

RETREE:	MOVEI	U1,[ASCIZ /   REPLACE TRUNK /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X4
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,3
	ADDM	U1,TREEX
	MOVN	Z,FLITZ
	SETZ	X3,
	MOVE	U1,LOSE
	MOVEM	U1,ZZ-1(X3)
	MOVEM	U1,ZZ-2(X3)
	JRST	TREES

TREES:	MOVEM	K,ACSAV+16
	MOVEI	K,ACSAV
	BLT	K,ACSAV+15
	MOVE	U2,PLY(X2)	;COMPUTE LAST PLAY
	SKIPE	TIPPLY		;X2 MAY BE FALSE IN TIP
	MOVE	U2,TIPPLY
	ADD	U2,X3
	ANDI	U2,1
	MOVEM	U2,LASTP
	MOVE	U2,TREEX		;PRINT SCORES
	CAILE	U2,20
	JRST	TREES2
	CAIL	U2,20
	JRST	.+4
	MOVEI	U1,[ASCIZ /      /]
	PUSHJ	PDP,PRINT
	AOJA	U2,.-4
	MOVE	U1,ZZ-1(X3)
	MOVE	U2,ZZ-2(X3)
	SKIPE	LASTP
	EXCH	U1,U2		;REPORT ALWAYS FOR PDP-6
	CAME	U1,LOSE
	JRST	.+4
	MOVEI	U1,[ASCIZ /        /]
	PUSHJ	PDP,PRINT
	SKIPA
	PUSHJ	PDP,SOUT
	MOVN	U1,Z
	SKIPE	LASTP
	MOVNS	U1
	PUSHJ	PDP,SOUT
	MOVN	U1,U2
	CAME	U1,WIN
	PUSHJ	PDP,SOUT
TREES2:	PUSHJ	PDP,TERPRI
	SETZM	BUFFF2
	MOVEI	U1,40
	MOVEM	U1,TREEX
	MOVSI	K,ACSAV
	BLT	K,K
	POPJ	PDP,
;SOUT SOUT2

SOUT:	MOVEM	Z,ZSAV#
	CAMLE	U1,BAD
	JRST	.+10
	SUB	U1,LOSE
	ADDI	U1,1
	PUSHJ	PDP,SOUT2
	MOVEI	U1,[ASCIZ /LOSS/]
	PUSHJ	PDP,PRINT
	MOVE	Z,ZSAV
	POPJ	PDP,
	CAMGE	U1,GOOD
	JRST	.+11
	MOVNS	U1
	ADD	U1,WIN
	ADDI	U1,1
	PUSHJ	PDP,SOUT2
	MOVEI	U1,[ASCIZ / WIN/]
	PUSHJ	PDP,PRINT
	MOVE	Z,ZSAV
	POPJ	PDP,
	ASH	U1,-5
	ADDI	U1,200
	MOVEM	U1,U1S
	ASH	U1,-10
	PUSHJ	PDP,SOUT2
	MOVE	U1,U1S
	ANDI	U1,377
	SUBI	U1,200
	PUSHJ	PDP,SOUT2
	MOVE	Z,ZSAV
	POPJ	PDP,

SOUT2:	SETZ	X2,
	MOVM	Z,U1
	SKIPGE	U1
	SOS	X2
	JRST	RJ2
;TREEX TREE UPNUMS UPNUM RAD UPNUM0 UPNUM1
TREEX:	20		;SET LARGE AT START
TREE:	0		;PRINT TREES
UPNUMS:	BLOCK	20

UPNUM:	SOS	U2
	MOVEM	K,UPNUMS+16
	MOVEI	K,UPNUMS
	BLT	K,UPNUMS+15
	SETZM	P
	SKIPE	DIFF
	JRST	UPNUM0
	SKIPE	TOTAL
	JRST	UPNUM1
	MOVE	A,COUNT		;GET NUMBER OF UPDATED BOARDS
	CAIGE	A,100000
	AOS	P
	CAIGE	A,10000
	AOS	P
	CAIGE	A,1000
	AOS	P
	CAIGE	A,100
	AOS	P
	CAIGE	A,10
	AOS	P
	JUMPE	P,.+4
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	SOJG	P,.-2
	MOVE	U1,A
RAD:	PUSHJ	PDP,OCT2
	MOVSI	K,UPNUMS
	BLT	K,K
	POPJ	PDP,
UPNUM0:	SETZM	A
	CALL	A,[SIXBIT /RUNTIME/]
	MOVE	U1,DIFFT
	MOVEM	A,DIFFT
	SUB	A,U1
	JRST	.+4
UPNUM1:	SETZM	A
	CALL	A,[SIXBIT /RUNTIME/]
	SUB	A,TIME
	CAIGE	A,↑D100000
	AOS	P
	CAIGE	A,↑D10000
	AOS	P
	CAIGE	A,↑D1000
	AOS	P
	CAIGE	A,↑D100
	AOS	P
	CAIGE	A,↑D10
	AOS	P
	JUMPE	P,.+4
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	SOJG	P,.-2
	MOVE	U1,A
	PUSHJ	PDP,NUMOUT
	JRST	RAD+1
;CTELLC DEBUG TELLC MTRE TREE1 TREE2 CORR

CTELLC:	SETCMM	TELLC
	POPJ	PDP,

DEBUG:	SETCMM	TELLC
	PUSHJ	PDP,LPTREE
	POPJ	PDP,

TELLC:	Z

MTRE:	MOVE	U3,BRUSH(X2)
	LSH	U3,1
	CAML	U3,DEPTHM
	AOSA	PRFLG#
	SETOM	PRFLG
	MOVE	U5,MVAA(X4)
	MOVE	U4,MVPP(X4)
	MOVE	U2,PLY-1(X2)
	MOVE	U3,MMSKIP(X4)
	MOVEI	U1,[ASCIZ / /]
	TRNE	U2,1
	MOVEI	U1,[ASCIZ /,/]
	MOVEM	U1,DOTFLG
TREE1:	XOR	U5,U4
	AND	U4,U5
	XOR	U5,U4		;YES, HE REALLY MEANS IT!
	CAML	U2,TREEX
	JRST	TREE2
	SKIPN	BUFFF2
	JRST	.+4
	MOVEI	U1,[ASCIZ /   #  /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	SETOM	BUFFF2
	MOVEM	U2,TREEX
	JUMPLE	U2,.+7
	SKIPE	TELLC
	PUSHJ	PDP,UPNUM
	JUMPLE	U2,.+4
	MOVEI	U1,[ASCIZ /      /]
	PUSHJ	PDP,PRINT
	SOJG	U2,.-2
TREE2:	MOVE	U1,DOTFLG
	SKIPN	PRFLG
	MOVEI	U1,[ASCIZ /!/]
	PUSHJ	PDP,PRINT
	ADDM	U3,TREEX
	PUSHJ	PDP,FIND
	MOVE	U5,U1
	CAIL	U1,12
	JRST	.+3
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	MOVE	U1,U5
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	MOVE	U5,U4
	PUSHJ	PDP,FIND
	MOVE	U5,U1
	PUSHJ	PDP,NUMOUT
	CAIL	U5,12
	JRST	.+3
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	SUBI	U3,1		;ALLOW FOR REPORTABLE BOARD
	JUMPLE	U3,.+4		;NO J'S NEEDED
	MOVEI	U1,[ASCIZ /   J  /]
	PUSHJ	PDP,PRINT
	SOJG	U3,.-2
	POPJ	PDP,

CORR:	JRST	NOTICE
;TREEMP TREMP1 TREMP3 TRESTR TREST2 TREST3 BUFFX BUFFF BUFFF2 BUFFF3 BUFF

TREEMP:	SKIPE	BUFFF		;EXPANDED TIPS
	JRST	TREES		;YES
	SKIPE	BUFFFF
	JRST	.+3
	SETOM	BUFFFF
	JRST	.+6
	MOVN	U1,Z
	CAMG	U1,ZZ-1(X3)
	POPJ	 PDP,		;OMIT THIS LINE
	CAMG	Z,ZZ-2(X3)
	POPJ	PDP,		;OMIT THIS LINE
	SETZM	BUFFF3		;BUFF IS TO BE PRINTED
	SKIPE	BUFFF2
	JRST	.+11
	MOVE	U2,TREEX	;LINE HAS JUST BEEN EMPTIED
	JUMPLE	U2,.+7
	SKIPE	TELLC
	PUSHJ	PDP,UPNUM
	JUMPLE	U2,.+4
	MOVEI	U1,[ASCIZ /      /]
	PUSHJ	PDP,PRINT
	SOJG	U2,.-2
	SETZ	U3,
TREMP1:	MOVE	U1,BUFF(U3)
	JUMPE	U1,TREES	;BUFF IS EMPTY
	HRRZ	U1,BUFF(U3)
	PUSHJ	PDP,PRINT
	HLRZ	U5,BUFF(U3)
	JUMPE	U5,TREMP3
	LSH	U5,-6
	CAIL	U5,12
	JRST	.+3
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	MOVE	U1,U5
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	HLRZ	U5,BUFF(U3)
	SETZM	BUFF(U3)
	ANDI	U5,77
	MOVE	U1,U5
	PUSHJ	PDP,NUMOUT
	CAIL	U5,12
	JRST	.+3
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
TREMP3:	AOS	TREEX
	AOJA	U3,TREMP1

TRESTR:	SKIPE	BUFFF		;EXPAND TIPS
	JRST	TREE1		;YES
	MOVEM	X1,X1S
	XOR	U5,U4
	AND	U4,U5
	XOR	U5,U4
	SKIPE	BUFFF3		;WAS BUFF PRINTED
	JRST	TREST2
	MOVEI	X1,17		;YES SO EMPTY
	SETZM	BUFF(X1)
	SOJGE	X1,.-1
	SETZB	X1,BUFFX
	MOVEM	U2,TREEX
	JRST	TREST3
TREST2:	MOVE	X1,BUFFX
	MOVE	U1,X1
	ADD	U1,TREEX
	CAML	U2,U1
	JRST	.+5
	SETZM	BUFF(X1)
	SKIPE	X1
	SOJGE	X1,.-6
	MOVEM	U2,TREEX
TREST3:	MOVE	U1,DOTFLG
	MOVEM	U1,BUFF(X1)
	PUSHJ	PDP,FIND
	LSH	U1,30
	IORM	U1,BUFF(X1)
	MOVE	U5,U4
	PUSHJ	PDP,FIND
	LSH	U1,22
	IORM	U1,BUFF(X1)
	ADDI	X1,1
	SUBI	U3,1
	JUMPLE	U3,.+5
	MOVEI	U1,[ASCIZ /   J  /]
	MOVEM	U1,BUFF(X1)
	ADDI	X1,1
	SOJG	U3,.-2
	MOVEM	X1,BUFFX
	MOVE	X1,X1S
	SETOM	BUFFF3		;NEW DATA IN BUFF
	POPJ	PDP,

BUFFX:	Z		;BUFFER INDEX
BUFFF:	Z		;NON-ZERO TO EXPAND TIPS
BUFFF2:	Z		;LINE TERPRI FLAG
BUFFF3:	Z		;ANOTHER LINE TER FLAG
BUFF:	BLOCK	20	;TREE BUFFER
;MOVIN MOVIN0 MOVIN1 MOVIN2 MOVIN3 MOVIN4 MORE MOVIN5 MOVIN6 MOVIN7 MOVIN8 MKMOV MKPLAY

;**************************************************************
;  THESE I/O ROUTINES USE REGISTERS U1, U2, U3, U4, U5, X4,   }
;AND PDP.  REGISTERS X1, X2, X3, AND X5 ARE USED BY OTHER     }
;ROUTINES (SAUTER'S) WHICH ARE CALLED BY THESE ROUTINES.      }
;**************************************************************
;MOVIN IS CALLED BY THE INTERPRETER WHEN A NUMBER IS
;ENCOUNTERED AS THE FIRST ELEMENT OF A COMMAND.  
MOVIN:	PUSHJ	PDP,SETLEG	;FIX ORF, ETC. FOR NEXT MOVE
	MOVE	U2,[POINT 4,MJ]
	MOVEM	U2,MJBP		;INIT BYTE POINTER
	MOVE	U2,[POINT 6,MJBP,5]
	MOVEM	U2,BPBP		;INIT BYTE POINTER'S BYTE POINTER
	MOVEI	I,300
	HRLZI	U3,400000
	HRRZS	U1
	PUSHJ	PDP,OUTIN	;FIX THE NUMBER
	MOVN	U4,U1
	LSH	U3,(U4)		;MOVE BIT NOW IN PROPER POSITION
	PUSHJ	PDP,SCAN	;GET SEPARATER
	TLNE	U1,-1		;NUMBER OR IDENTIFIER?
	JRST	.+3		;NUMBER, SPACE OR "," MUST HAVE BEEN DELIMITER
	PUSHJ	PDP,EOL		;GET THE NEXT NUMBER
	JRST	ERR
	PUSHJ	PDP,OUTIN	;FIX THE NUMBER
	MOVE	U2,U1
	ADD	U4,U2
	MOVM	U1,U4
	CAIGE	U1,6		;IS HE TRYING TO MAKE A JUMP?
	JRST	MOVIN0		;NO
	SKIPE	OJ		;DID LEGALS FIND JUMP MOVES?
	JRST	.+3		;YES
	MOVEI	U1,[ASCIZ /JUMP?/]
	JRST	IMP+1
	ASH	U4,-1
	JRST	MOVIN1
MOVIN0:	SKIPN	OJ		;IS IT A JUMP MOVE?
	JRST	MOVIN1		;NO
	MOVEI	U1,[ASCIZ /JUMP!/]
	JRST	IMP+1
MOVIN1:	SETZB	X4,X3
	JUMPL	U4,MOVIN3
	CAIE	U4,4
	JRST	MOVIN2
	MOVE	U1,ORF
	TDNN	U1,U3		;IS IT A LEGAL MOVE?
	JRST	IMP		;NO
	JRST	MORE
MOVIN2:	CAIE	U4,5
	JRST	IMP
	MOVE	U1,OLF
	TDNN	U1,U3		;IS IT A LEGAL MOVE?
	JRST	IMP		;NO
	JRST	MORE
MOVIN3:	TLZ	U4,777777
	CAIE	U4,-4
	JRST	MOVIN4
	TLO	U4,777777
	MOVE	U1,OLB
	TDNN	U1,U3		;IS IT A LEGAL MOVE?
	JRST	IMP		;NO
	JRST	MORE
MOVIN4:	CAIE	U4,-5
	JRST	IMP
	TLO	U4,777777
	MOVE	U1,ORB
	TDNN	U1,U3		;IS IT A LEGAL MOVE?
	JRST	IMP		;NO
MORE:	PUSHJ	PDP,SCAN
	SKIPN	ACCFLG
	JRST	.+5
	MOVEI	U2,MOVIT-1
	CAIN	U1,15
	MOVEM	U2,(PDP)
	CAIE	U1,","
	TLZN	U1,400000
	JRST	MKMOV
	PUSHJ	PDP,OUTIN	;FIX THE NUMBER
	MOVN	U5,U2	
	ADD	U5,U1
	ASH	U5,-1
	ROT	X4,(X3)
	JUMPL	U5,MOVIN6
	CAIE	U5,4		;RFMJ?
	JRST	MOVIN5		;NO, BUT MAYBE LFMJ
	TLO	X4,40000	;SET RF BIT
	JRST	MOVIN8
MOVIN5:	CAIE	U5,5		;LFMJ?
	JRST	IMP		;ILLEGAL MOVE
	TLO	X4,100000	;SET LF BIT
	JRST	MOVIN8
MOVIN6:	TLZ	U5,777777	;SO THAT THE NEXT INSTR. WILL WORK
	CAIE	U5,-4		;LBMJ?
	JRST	MOVIN7		;NO, BUT MAYBE RBMJ
	TLO	U5,777777	;UNDOES THAT WHICH HAS BEEN DONE
	TLO	X4,200000	;SET LB BIT
	JRST	MOVIN8
MOVIN7:	CAIE	U5,-5		;RBMJ?
	JRST	IMP		;ILLEGAL MOVE
	TLO	U5,777777
	TLO	X4,400000	;SET RB BIT
MOVIN8:	MOVNS	X3
	ROT	X4,(X3)
	MOVMS	X3
	ADDI	X3,4
	MOVE	U2,U1
	JRST	MORE
MKMOV:	AOS	FSTCR
	MOVEM	X4,MJW
	MOVE	U1,U3
	MOVE	A,OA		;LOAD BOARD INTO A, P, AND K
	MOVE	P,OP
	MOVE	K,OK
	AOS	SI
	MOVN	U2,U4
	MOVE	X5,MJW
	MOVEI	X3,1
	PUSHJ	PDP,UPDATE+2	;UPDATE
	MOVEM	A,IA		;STORE BOARD
	MOVEM	P,IP
	MOVEM	K,IK
	MOVEM	A,OA
	MOVEM	P,OP
	MOVEM	K,OK
	SKIPE	ACCFLG#
	POPJ	PDP,
MKPLAY:	PUSHJ	PDP,SAVBD	;SAVE BOARD POSITION
	SETCMM	LPFLAG
	SETZM	Z
	CALL	Z,[SIXBIT /RUNTIME/]
	MOVEM	Z,TIME
	MOVE	A,OA		;ADDED FEB 25 70
	MOVE	P,OP
	MOVE	K,OK
	PUSHJ	PDP,PLAY	;NOW GO PLAY CHECKERS
;MOVOUT MOVOUX MOVOUY MOVOUZ SUM SUM1

;MOVOUT IS CALLED BY THE CHECKER PROGRAM AFTER IT HAS FINALLY
;DECIDED WHAT TO DO.

MOVOUT:		SETZM	Z
	CALL	Z,[SIXBIT /RUNTIME/]
	SUB	Z,TIME
	MOVEM	Z,TIME
	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	MOVE	U2,U1
	MOVE	U3,U1
	SKIPE	HEADFL
	PUSHJ	PDP,HEAD
	MOVE	U1,SI		;GET MOVE INDEX
	PUSHJ	PDP,NUMOUT	;WRITE MOVE INDEX
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT	;WRITE TAB
	HLRZ	U1,U3		;GET STARTING POSITION
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT	;PRINT HYPHEN
	HRRZ	U1,U3		;GET DESTINATION POSITION
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT
	MOVE	U1,COUNT
	PUSHJ	PDP,RJOUT
	MOVEI	U1,[ASCIZ /./]
	PUSHJ	PDP,PRINT
	SKIPE	SFLAG
	PUSHJ	PDP,TELLS
	SKIPE	DWFLAG
	PUSHJ	PDP,TELLDW
	SKIPE	RUNT
	PUSHJ	PDP,RUNT+1
	SKIPE	USEBOK
	JRST	MOVOUZ
	MOVE	U1,U2MAX
	PUSHJ	PDP,RJOUT
	MOVE	U1,TIMEX
	LSH	U1,11
	PUSHJ	PDP,RJOUT
	PUSHJ	PDP,TERPRI
	MOVEI	X3,1
	MOVEI	U1,[ASCIZ /       /]
	PUSHJ	PDP,PRINT
MOVOUX:	MOVE	U2,MOVXZ(X3)
	JUMPL	U2,MOVOUY
	MOVEI	U1,[ASCIZ /  /]
	PUSHJ	PDP,PRINT
	HLRZ	U1,MOVES(U2)
	CAIL	U1,12
	JRST	.+4
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	HLRZ	U1,MOVES(U2)
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	HRRZ	U1,MOVES(U2)
	CAIL	U1,12
	JRST	.+4
	MOVEI	U1,[ASCIZ / /]
	PUSHJ	PDP,PRINT
	HRRZ	U1,MOVES(U2)
	PUSHJ	PDP,NUMOUT
	AOJA	X3,MOVOUX
MOVOUY:	PUSHJ	PDP,TERPRI
	SETZ	X3,
	JRST	.+2
	PUSHJ	PDP,RJOUT
	SKIPE	U1,DEPTHZ(X3)
	AOJA	X3,.-2
	PUSHJ	PDP,TERPRI
	SETZ	X3,
	JRST	.+3
	SUB	U1,COUNTZ-2(X3)
	PUSHJ	PDP,RJOUT
	SKIPE	U1,COUNTZ(X3)
	AOJA	X3,.-3
MOVOUZ:	SKIPG	LPFLAG
	JRST	.+6
	MOVEI	X1,14
	PUSHJ	PDP,TYO
	SETCMM	LPFLAG
	MOVE	U1,U2
	JRST	MOVOUT+10
	SETZM	COUNT
	AOS	SI
	PUSHJ	PDP,SAVBD
	JRST	TERPRI

SUM:	SETZB	X4,SI
	SETZM	HEADFL
	PUSHJ	PDP,TERPRI
	AOS	U4,SI
	SKIPN	U5,SP+1(U4)
	JRST	SUM1
	MOVE	P,U5
	XOR	U5,SA(U4)
	PUSHJ	PDP,FINDM+2
	PUSHJ	PDP,MOVOUT+2
	JRST	SUM+3
SUM1:	MOVE	U1,U4
	JRST	GO+5
;HEAD SAVBD RECOUT RECIN RECORD GAMESV IMP

HEAD:	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	SKIPLE	LPFLAG
	POPJ	PDP,
	SETZM	HEADFL
	MOVEI	U1,[ASCIZ /	MOVE   # OF BDS/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,[ASCIZ /    PIECE   EVAL/]
	SKIPE	SFLAG
	PUSHJ	PDP,PRINT
	MOVEI	U1,[ASCIZ /   TIME/]
	SKIPE	RUNT
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

SAVBD:	MOVE	X5,SI
	CAIL	X5,100		;LIMIT OF TABLE SIZE
	POPJ	PDP,
	MOVEM	A,SA(X5)
	MOVEM	P,SP(X5)
	MOVEM	K,SK(X5)
RECOUT:	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	SETZM	GAMESV+3
	ENTER	12,GAMESV
	HALT
	OUTPUT	12,RECORD
	RELEAS	12,
	POPJ	PDP,

RECIN:	INIT	12,17
	SIXBIT	/DSK/
	Z
	SETZM	GAMESV+3
	LOOKUP	12,GAMESV
	JRST	.+4
	INPUT	12,RECORD
	RELEAS	12,
	POPJ	PDP,
	MOVEI	U1,[ASCIZ /GAME FILE NOT FOUND./]
	PUSHJ	PDP,PRINT
	JRST	TERPRI

RECORD:	IOWD	100,SA
	Z
GAMESV:	SIXBIT	/GAME/
	SIXBIT	/CHK/
	0
	SIXBIT	/CH2ALS/
IMP:	MOVEI	U1,[ASCIZ /IMP!/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;ACCEPT ACC ACC1 ACC2 ACC3 ACCMOV MOVIT

;****************************************************************
;ACCEPT WILL ACCEPT A STARTING BOARD POSITION FROM THE TTY.     *
;NO ERROR CHECKING IS DONE AGAINST STARTING WITH A BOARD WITH   *
;MORE THAN 12 BLACK OR WHITE PIECES.  THUS, AN OPPONENT CAN     *
;GIVE THE MACHINE A HANDICAP BY GIVING HIMSELF 13 OR 14 PIECES. *
;                                                               *
;REGISTERS U1, U3, U4, U5, X1, X2, AND X3 ARE DESTROYED BY      *
;ACCEPT.                                                        *
;****************************************************************
ACCEPT:	SETZM	FSTCR
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	SETZM	U5
	PUSHJ	PDP,EOL		;GOBBLE UP CR IN BUFFER
	SKIPA
	JRST	ACCMOV
	MOVEI	U1,[ASCIZ /BLACK PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;READ IN BLACK PIECES
	MOVEM	U3,OA		;STORE BLACK PIECES
	MOVEI	U1,[ASCIZ /WHITE PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;NOW READ IN WHITE PIECES
	MOVEI	U1,[ASCIZ /BLACK TO PLAY? /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,1
	MOVEM	U1,SI
	PUSHJ	PDP,NOYES
	AOSA	SI
	JRST	.+3		;BLACK IS TO PLAY
	EXCH	U3,OA
	SETZM	SIDE
	MOVEM	U3,OP		;STORE WHITE PIECES
	MOVEM	U5,OK
	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	PUSHJ	PDP,SAVBD
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
ACC:	SETZM	U3
ACC1:	HRLZI	U4,400000
ACC2:	PUSHJ	PDP,SCAN
	CAIN	U1,15		;CR?
	POPJ	PDP,		;YES
	TLZE	U1,400000	;NUMBER?
	JRST	ACC3		;YES
	HRRZS	U1		;GET RID OF LEFT HALF FLAG BITS
	CAIN	U1,K		;IF A KING ...
	TDO	U5,U4		; ... SET KING BIT
	JRST	ACC1
ACC3:	PUSHJ	PDP,OUTIN	;CONVERT TO INTERNAL NUMBERS
	MOVNS	U1
	ROT	U4,(U1)		;ROTATE TO BIT'S POSITION
	TDO	U3,U4		;SET PIECE'S BIT
	JRST	ACC2

ACCMOV:	SETOM	ACCFLG
	PUSHJ	PDP,MOVIN
	PUSHJ	PDP,MOVIT
	PUSHJ	PDP,EOL
	AOSA	ACCFLG
	JRST	.-4
	POPJ	PDP,

	SETZM	ACCFLG
MOVIT:	MOVEI	U1,1
	XORM	U1,SIDE
	MOVEM	A,OA
	MOVEM	P,OP
	MOVEM	K,OK
	POPJ	PDP,
;GO ERRGO PB PW SETB SETW BTERMS WTERMS PC SIG PORT PDP16

;********************************************
;GO WILL INITIATE PLAY AT THE BOARD SPECIFIED
;********************************************

GO:	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,EOL
	SOS	U1,SI
	CAIGE	U1,1		;NUMBER IN PERMISSABLE RANGE?
	JRST	ERRGO		;NO
	MOVEM	U1,SI		;STORE NEW INDEX
	MOVE	A,SA(U1)	;GET BOARD
	MOVE	P,SP(U1)
	MOVE	K,SK(U1)
	MOVEM	A,OA
	MOVEM	P,OP
	MOVEM	K,OK
	SETZM	SIDE
	TRNN	U1,1
	AOS	SIDE
	POPJ	PDP,

ERRGO:	MOVEI	U1,[ASCIZ /BOARD OUT OF RANGE./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

PB:	MOVE	U1,SI
	TRNN	U1,1
	POPJ	PDP,
	SETZM	SIDE
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,PDP16
	MOVEI	U1,[ASCIZ / IS NOW PLAYING BLACK./]
	PUSHJ 	PDP,PRINT
	PUSHJ	PDP,TERPRI
	AOS	FSTCR
	JRST	MKPLAY

PW:	MOVE	U1,SI
	TRNE	U1,1
	POPJ	PDP,
	SKIPN	SIDE
	AOS	SIDE
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,PDP16
	MOVEI	U1,[ASCIZ / IS NOW PLAYING WHITE./]
	JRST	PB+7


SETB:	MOVEI	U1,[ASCIZ /BLACK = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,OCTIN
	MOVEM	U1,BTERMS
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

SETW:	MOVEI	U1,[ASCIZ /WHITE = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,OCTIN
	MOVEM	U1,WTERMS
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

BTERMS:	777777
WTERMS:	777777

PC:	SETZM	CFLAG
	SETZM	BTERMS
	SETZM	WTERMS
	POPJ	PDP,

SIG:	MOVEI	U2,777777
	MOVEM	U2,BTERMS
	MOVEM	U2,WTERMS
	MOVEM	U2,CFLAG
	POPJ	PDP,


PORT:	MOVEI	X1,15
	CAMN	X1,LASCAR	;LASCAR A <CR>?
	POPJ	PDP,		;YES, SO RETURN FOR SET BOTH
	PUSHJ	PDP,TYI		;NO, SO GET NEXT CHAR. FROM TTY
	CAIN	U1," "		;A SPACE?
	JRST	PORT		;YES, SO TRY AGAIN
	AOS	(PDP)
	AOS	(PDP)		;SET RETURN ADDRESS FOR TIP ONLY
	CAIN	U1,"T"		;"T" FOR "TIP"?
	POPJ	PDP,		;YES, SO RETURN
	AOS	(PDP)
	AOS	(PDP)
	CAIN	U1,"P"		;"P" FOR "PLAUS"?
	POPJ	PDP,
	AOS	(PDP)
	AOS	(PDP)
	POPJ	PDP,		;FLITEV RETURN

PDP16:	MOVEI	U1,[ASCIZ /THE PDP-/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,MTYPE
	PUSHJ	PDP,NUMOUT
	POPJ	PDP,
;BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK

;************************************************************
;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT.  *
;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4.  *
;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT           *
;************************************************************

BDOUT:	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	PUSHJ	PDP,TERPRI
	SETZB	X4,U2
	SETZM	X3
	MOVE	U4,A
	MOVE	U5,P
	AND	U4,K		;ACTIVE KINGS
	AND	U5,K		;PASSIVE KINGS
	PUSHJ	PDP,BORDER
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,PSTAR
AGAIN:	PUSHJ	PDP,PPLUS	;PRINT + SIGN
	TRNN	U2,7
	JRST	CRLFCK
AGAIN1:	ROT	A,-1
	ROT	U4,-1
	ROT	P,-1
	ROT	U5,-1
	TLNN	U4,400000	;BK?
	JRST	.+3
	PUSHJ	PDP,PBK
	JRST	BDOUT1
	TLNN	A,400000	;BM?
	JRST	.+3		;NO
	PUSHJ	PDP,PBM
	JRST	BDOUT1
	TLNN	U5,400000	;WK?
	JRST	.+3		;NO
	PUSHJ	PDP,PWK
	JRST	BDOUT1
	TLNN	P,400000	;WM?
	JRST	.+3		;NO
	PUSHJ	PDP,PWM
	JRST	BDOUT1
	PUSHJ	PDP,PHYFEN	;EMPTY SQUARE
BDOUT1:	AOS	X4
	CAIN	X4,↑D8		;SHIFT OVER BITS 9, 18, 27
	JRST	BDOUT2
	CAIN	X4,↑D17
	JRST	BDOUT2
	CAIE	X4,↑D26
	JRST	CRLFCK
BDOUT2:	ROT	A,-1
	ROT	U4,-1
	ROT	P,-1
	ROT	U5,-1
	AOS	X4
CRLFCK:	TRNE	U2,7		;DO WE WANT A CR-LF?
	JRST	AGAIN		;NO
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,TERPRI
	SETCMM	X3
	JUMPGE	X3,.+3
	PUSHJ	PDP,PSTAR
	JRST	AGAIN1
	CAIE	U2,↑D64
	JRST	AGAIN-1
	PUSHJ	PDP,BORDER
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	ROT	A,-1
	ROT	P,-1
	POPJ	PDP,

PPLUS:	MOVEI	U1,[ASCIZ /+ /]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,

BORDER:	MOVEI	U1,[ASCIZ /* * * * * * * * * */]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

PSTAR:	MOVEI	U1,[ASCIZ /* /]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

PHYFEN:	MOVEI	U1,[ASCIZ /  /]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,

PBM:	MOVEI	U1,[ASCIZ /B /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /W /]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,

PBK:	MOVEI	U1,[ASCIZ /BK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /WK/]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,

PWM:	MOVEI	U1,[ASCIZ /W /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /B /]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,

PWK:	MOVEI	U1,[ASCIZ /WK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /BK/]
	PUSHJ	PDP,PRINT
	AOS	U2
	POPJ	PDP,
;BOUT BOUT0 BOUT1 BOUT2 BOUT3

;************************************************************
;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY.  ONE    *
;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS  *
;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM.                 *
;************************************************************

BOUT:	MOVE	U2,SI		;GET MOVE INDEX
	MOVE	U4,OA		;GET ACTIVE PIECES
BOUT0:	MOVE	U5,OK		;& KINGS
	PUSHJ	PDP,TERPRI
	MOVEI	U3,1
	MOVEI	U1,[ASCIZ /B /]
	TRNN	U2,1		;BLACK TO PLAY?
	MOVEI	U1,[ASCIZ /W /]	;NO
	PUSHJ	PDP,PRINT
	LSH	U4,1
	LSH	U5,1
BOUT1:	TLNN	U4,400000	;A PIECE THERE?
	AOJA	U3,.-3		;NO
	PUSHJ	PDP,INOUT	;YES, SO PRINT NUMBER
	MOVEI	X1,"K"
	TLNE	U5,400000	;IS PIECE A KING?
	PUSHJ	PDP,TYO		;YES, SO PRINT "K"
	LSH	U4,1
	LSH	U5,1		;SHIFT TO NEXT POSITION
	JUMPE	U4,BOUT2	;JUMP IF NO MORE PIECES
	MOVEI	X1,","		;THERE ARE MORE PIECES
	PUSHJ	PDP,TYO		;SO PRINT COMMA
	AOJA	U3,BOUT1
BOUT2:	TLCE	U2,-1		;FIRST OR SECOND TIME HERE?
	JRST	BOUT3		;SECOND, SO EXIT
	TRC	U2,1
	MOVE	U4,OP
	JRST	BOUT0
BOUT3:	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;LEGM LEGM1 SETLEG EOG LPTREE TRESET INOUT

;*************************************
;LEGM PRINTS ALL POSSIBLE LEGAL MOVES.
;*************************************

LEGM:	SETZM	FLAG
	MOVEI	U3,4
	SKIPE	U2,ORF
	PUSHJ	PDP,LEGM1
	MOVEI	U3,5
	SKIPE	U2,OLF
	PUSHJ	PDP,LEGM1
	MOVNI	U3,4
	SKIPE	U2,OLB
	PUSHJ	PDP,LEGM1
	MOVNI	U3,5
	SKIPE	U2,ORB
	PUSHJ	PDP,LEGM1
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
LEGM1:	SETZM	U4
	CAIL	U4,↑D35
	POPJ	PDP,
	ROT	U2,1
	AOS	U4
	TLNN	U2,400000
	JRST	LEGM1+1
	MOVEI	U1,[ASCIZ /,/]
	SKIPE	FLAG
	PUSHJ	PDP,PRINT
	MOVE	U1,U4
	PUSHJ	PDP,INOUT+1
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	MOVE	U1,U4
	ADD	U1,U3
	SKIPE	OJ
	ADD	U1,U3
	PUSHJ	PDP,INOUT+1
	AOS	FLAG
	JRST	LEGM1+1

;**********************************
;SETLEG SETS UP INITIAL LEGAL MOVES
;**********************************

SETLEG:	MOVEM	U1,X1S
	SETZB	X3,SIDE
	MOVE	A,SI
	TRNE	A,1
	AOS	SIDE
	MOVE	A,SIDE
	TRC	A,1
	MOVEM	A,COLOR
	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	SETZM	OJ
	PUSHJ	PDP,LEGAL
	JRST	EOG
	SETOM	OJ
	MOVE	U3,PLRF
	MOVEM	U3,ORF
	MOVE	U4,PLLF
	MOVEM	U4,OLF
	MOVE	U5,PLLB
	MOVEM	U5,OLB
	MOVE	Q,PLRB
	MOVEM	Q,ORB
	MOVE	U1,X1S
	POPJ	PDP,
EOG:	MOVEI	U1,[ASCIZ /NO LEGAL MOVES./]
	JRST	PRINT

	PAGE

;******************
;SET TREE FLIP-FLOP
;******************

LPTREE:	PUSHJ	PDP,LPTFIX	;SEND TREES TO LPT
TRESET:	MOVEI	U1,1
	XORM	U1,TREE
	POPJ	PDP,

;************************************************
;INOUT CONVERTS AN INTERNAL NUMBER TO AN EXTERNAL
;NUMBER AND PRINTS IT ON THE TTY
;************************************************

INOUT:	MOVE	U1,U3
	CAIL	U1,↑D27
	SOS	U1
	CAIL	U1,↑D18
	SOS	U1
	CAIL	U1,↑D9
	SOS	U1
	PUSHJ	PDP,NUMOUT
	POPJ	PDP,
;PLAYBS PBS D W SETPAR

;********************************************
;PLAYBS WILL HAVE THE MACHINE PLAY BOTH SIDES
;********************************************

PLAYBS:	PUSHJ	PDP,EOL
	SETOM	U1
	MOVEM	U1,STOP
	PUSHJ	PDP,SCAN
	MOVE	U1,SI
	SETZM	SIDE
	TRNN	U1,1
	AOS	SIDE
	AOS	FSTCR
	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	PUSHJ	PDP,MKPLAY	;GO PLAY CHECKERS
	CALLI	U1,20
	CAIN	U1,012345
	POPJ	PDP,
	TTYUUO	2,U1
	JRST	.+2
	JRST	INTERP
	MOVE	U1,SI
	CAME	U1,STOP
	JRST	PBS
	MOVEI	U1,[034160703400]	;PRINT 4 BELLS
	PUSHJ	PDP,PRINT
	POPJ	PDP,		;TIME TO STOP
PBS:	MOVEI	U1,1
	XORM	U1,SIDE
	JRST	PLAYBS+10	;NOW PLAY OTHERSIDE

	PAGE

D:	PUSHJ	PDP,SCAN	;GET NEXT CHARACTER
	SETOM	DWFLAG
	CAIN	U1,"+"		;IS IT A '+'?
	AOS	DEPTH		;YES
	CAIN	U1,"-"		;IS IT A '-'?
	SOS	DEPTH		;YES
	TLZE	U1,400000	;IS IT A NUMBER?
	MOVEM	U1,DEPTH	;YES
	POPJ	PDP,

W:	PUSHJ	PDP,SCAN	;GET NEXT CHARACTER
	SETOM	DWFLAG
	CAIN	U1,"+"		;IS IT A '+'?
	AOS	WIDTH		;YES
	CAIN	U1,"-"		;IS IT A '-'?
	SOS	WIDTH
	TLZE	U1,400000	;IS IT A NUMBER?
	MOVEM	U1,WIDTH	;YES
	POPJ	PDP,

SETPAR:	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /DEPTH = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,DEPTH
	MOVEI	U1,[ASCIZ /TIME = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,TIMEX
	MOVEI	U1,[ASCIZ /WIDTH = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,WIDTH
	MOVEI	U1,[ASCIZ /TAPER = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,TAPER
	MOVEI	U1,[ASCIZ /BLACK = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,OCTIN
	MOVEM	U1,BTERMS
	MOVEI	U1,[ASCIZ /WHITE = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,OCTIN
	MOVEM	U1,WTERMS
	MOVEI	U1,[ASCIZ /REPLY = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,REPLYD
	MOVEI	U1,[ASCIZ /FLIT = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,PLAUSD
	MOVEI	U1,[ASCIZ /STEM = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,STEMD
	MOVEI	U1,[ASCIZ /PLAY = /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,DECIN
	MOVEM	U1,PLAYD
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

;TELPAR REPLYD PLAUSD STEMD PLAYD PLDPT

TELPAR:	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /DEPTH = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,DEPTH
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /TIME = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,TIMEX
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /WIDTH = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,WIDTH
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /TAPER = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,TAPER
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /BLACK = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,BTERMS
	PUSHJ	PDP,OCTOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /WHITE = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,WTERMS
	PUSHJ	PDP,OCTOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /REPLY = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,REPLYD
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /FLIT = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,PLAUSD
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /STEM = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,STEMD
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /PLAY = /]
	PUSHJ	PDP,PRINT
	MOVE	U1,PLAYD
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

REPLYD:	5
PLAUSD:	2
STEMD:	1
PLAYD:	1
PLDPT:	0
;CSFLAG TELLDW TIME RUNT CRUNT CDIFF DIFFT DIFF TOTAL CTOTAL TELLS TELLS2 NUMIN

CSFLAG:	SOS	HEADFL
	SETCMM	SFLAG		;SFLAG IS THE SCORE PRINT OUT FLIP-FLOP
	POPJ	PDP,

TELLDW:	MOVEI	U1,[ASCIZ /	DEPTH=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,DEPTH
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /, WIDTH=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,WIDTH
	PUSHJ	PDP,NUMOUT
	SETZM	DWFLAG
	POPJ	PDP,
TIME:	Z
RUNT:	-1
	MOVE	U1,TIME
	JRST	RJOUT

CRUNT:	SOS	HEADFL
	SETCMM	RUNT
	POPJ	PDP,

CDIFF:	SETCMM	DIFF
	POPJ	PDP,
DIFFT:	Z
DIFF:	Z
TOTAL:	Z

CTOTAL:	SETCMM	TOTAL
	POPJ	PDP,


TELLS:	MOVEI	U1,[ASCIZ /       BKMOVE  /]
	SKIPN	COUNT
	JRST	.+10
	MOVE	U1,SCORE
	MOVEI	X1," "
	CAMLE	U1,LOSE
	PUSHJ	PDP,TYO
	CAMLE	U1,LOSE
	JRST	TELLS2
	MOVEI	U1,[ASCIZ /       FORCED  /]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
TELLS2:	MOVE	U1,SCORE
	CAMGE	U1,GOOD
	JRST	.+10
	MOVNS	U1
	ADD	U1,WIN
	ADDI	U1,1
	PUSHJ	PDP,SOUT2
	MOVEI	U1,[ASCIZ / MOVE WIN./]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
	ASH	U1,-5
	ADDI	U1,200		;CONTERACT NEG. EVA
	MOVEM	U1,U1S#
	ASH	U1,-10
	PUSHJ	PDP,RJOUT	;PIECE COUNT
	MOVE	U1,U1S
	ANDI	U1,377
	SUBI	U1,200
	PUSHJ	PDP,RJOUT	;EVA PORTION
	POPJ	PDP,

NUMIN:	PUSHJ	PDP,SCAN		;SCAN NEXT SYMBOL
	JUMPGE	U1,NUMIN		;JUMP IF NOT A NUMBER.
	HRRZ	U2,U1			;GET VALUE.
	PUSHJ	PDP,OUTIN		;FIX THE NUMBER
	POPJ	PDP,			;TRA 1,4

;FSTCR CRFST

FSTCR:	0
CRFST:	SKIPE	FSTCR
	POPJ	PDP,
	SETZM	SIDE
	MOVE	A,OA
	MOVE	P,OP
	MOVE	K,OK
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,PDP16
	MOVEI	U1,[ASCIZ / WILL PLAY BLACK./]
	MOVE	X1,SI
	TRNN	X1,1
	AOS	SIDE
	TRNN	X1,1
	MOVEI	U1,[ASCIZ / WILL PLAY WHITE./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,SAVBD
	PUSHJ	PDP,TERPRI
	AOS	FSTCR
	JRST	MKPLAY

;MUP RF LF LB

MUP:	MOVE	A,MA-10(X1)
	SKIPN	A
	POPJ	PDP,
	MOVE	P,MP-10(X1)
	MOVE	K,MK-10(X1)
	MOVEM	A,MOVAA		;TREE DATA
	MOVE	U1,[POINT 4,MJ]
	MOVEM	U1,MJBP		;INIT BYTE POINTER
	MOVE	U1,[POINT 6,MJBP,5]
	MOVEM	U1,BPBP		;INIT BYTE POINTER'S BYTE POINTER
	SKIPE	U1,MRF-10(X1)
	JRST	RF
	SKIPE	U1,MLF-10(X1)
	JRST	LF
	SKIPE	U1,MLB-10(X1)
	JRST	LB
	SKIPN	U1,MRB-10(X1)
	POPJ	PDP,		;NO MOVE RETURN
	MOVEM	U1,SAVE
	HRLI	I,MRB-10(X1)
	HRRI	I,4300		;RB FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,MRB-10(X1)	;CORRECTED RB WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,MRB-10(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,5		;MAGIC NUMBER IN U2
	JRST	UPDATE
RF:	MOVEM	U1,SAVE
	HRLI	I,MRF-10(X1)
	HRRI	I,700		;RF FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,MRF-10(X1)	;CORRECTED RF WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,MRF-10(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,-4		;MAGIC NUMBER IN U2
	JRST	UPDATE
LF:	MOVEM	U1,SAVE
	HRLI	I,MLF-10(X1)
	HRRI	I,1300		;LF FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,MLF-10(X1)	;CORRECTED LF WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,MLF-10(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,-5		;MAGIC NUMBER IN U2
	JRST	UPDATE
LB:	MOVEM	U1,SAVE
	HRLI	I,MLB-10(X1)
	HRRI	I,2300		;LB FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,MLB-10(X1)	;CORRECTED LB WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,MLB-10(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,4		;MAGIC NUMBER IN U2
	JRST	UPDATE
;OVUP OVUPRF OVUPLF OVUPLB

OVUP:	MOVE	A,OVA(X1)
	SKIPN	A
	POPJ	PDP,
	MOVE	P,OVP(X1)
	MOVE	K,OVK(X1)
	MOVEM	A,MOVAA		;TREE DATA
	MOVE	U1,[POINT 4,MJ]
	MOVEM	U1,MJBP		;INIT BYTE POINTER
	MOVE	U1,[POINT 6,MJBP,5]
	MOVEM	U1,BPBP		;INIT BYTE POINTER'S BYTE POINTER
	SKIPE	U1,OVRF(X1)
	JRST	OVUPRF
	SKIPE	U1,OVLF(X1)
	JRST	OVUPLF
	SKIPE	U1,OVLB(X1)
	JRST	OVUPLB
	SKIPN	U1,OVRB(X1)
	POPJ	PDP,		;NO MOVE RETURN
	MOVEM	U1,SAVE
	HRLI	I,OVRB(X1)
	HRRI	I,4300		;RB FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,OVRB(X1)	;CORRECTED RB WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,OVRB(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,5		;MAGIC NUMBER IN U2
	JRST	UPDATE
OVUPRF:	MOVEM	U1,SAVE
	HRLI	I,OVRF(X1)
	HRRI	I,700		;RF FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,OVRF(X1)	;CORRECTED RF WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,OVRF(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,-4		;MAGIC NUMBER IN U2
	JRST	UPDATE
OVUPLF:	MOVEM	U1,SAVE
	HRLI	I,OVLF(X1)
	HRRI	I,1300		;LF FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,OVLF(X1)	;CORRECTED LF WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,OVLF(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,-5		;MAGIC NUMBER IN U2
	JRST	UPDATE
OVUPLB:	MOVEM	U1,SAVE
	HRLI	I,OVLB(X1)
	HRRI	I,2300		;LB FLAG BIT IN I
	SUBI	U1,1
	ANDM	U1,OVLB(X1)	;CORRECTED LB WORD WITH MOVE BIT GONE
	ADDI	U1,1
	XOR	U1,OVLB(X1)	;MOVE BIT ONLY IN U1
	MOVEI	U2,4		;MAGIC NUMBER IN U2
	JRST	UPDATE
;MACROS FOR SIGNATURE_TABLES

	DEFINE	MAC1	(S)	<;OUTER MACRO
		SETZ	U1,
		MAC2	\<3*S-2>
		ASH	U2,↑D12
		ADDM	U2,U2SAV
		IMULI	U1,5
		MAC2	\<3*S-1>
		ASH	U2,6
		ADDM	U2,U2SAV
		IMULI	U1,5
		MAC2	\<3*S>
		ADDM	U2,U2SAV
		ADD	U5,SIGT2'S(U1)>

	DEFINE	MAC2	(SC)	<;CENTRAL MACRO
		MAC3	1
		MOVE	U2,Q
		IMULI	U2,3
		MAC3	1
		ADD	U2,Q
		IMULI	U2,5
		MAC3	2
		ADD	U2,Q
		ADD	U1,SIGT1'SC(U2)>

	DEFINE	MAC3	(C)	<;INNER MACRO
		SETZB	Q,P
		LSHC	Q,4
		LSHC	P,4
		SUB	Q,P
		CAILE	Q,C
		MOVEI	Q,C
		CAMGE	Q,NEG+C
		MOVNI	Q,C>
;NEG DATA DATA2 DATA3 U2SAV ZZZ BZZ FLZZZ NUM1

NEG:	0		;NEGATION TABLE
	-1
	-2
	-3
	-4
	-5
	-6
	-7
	-10

INTERN	DATA
EXTERN	NUM2,NUM3

DATA:	MOVE	X4,PHASE
	IMULI	X4,↑D18
	MOVEI	U1,[ASCIZ /				TERM DATA FOR PHASE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,PHASE
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	REPEAT	3,<	MOVEI	U1,[ASCIZ /    		       /]
	PUSHJ	PDP,PRINT
	REPEAT	6,<	XCT	TLIST(X4)
	ADDI	X4,3
	PUSHJ	PDP,PRINT>
	SUBI	X4,↑D17
	PUSHJ	PDP,TERPRI>
	SETZ	X4,
	MOVEI	U1,[ASCIZ /TRUNK	  PIECE   EVAL/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
DATA2:	SKIPN	U2,MOVES(X4)
	JRST	TERPRI
	HLRZ	U1,U2
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	HRRZ	U1,U2
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT
	MOVE	U1,FLZZ(X4)
	PUSHJ	PDP,TELLS2+1
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT
	MOVEI	U3,6
DATA3:	SETZ	U1,
	MOVE	X2,FLZZZ(X4)
	LSHC	U1,6
	MOVEM	X2,FLZZZ(X4)
	IDIVI	U1,5
	MOVEM	X2,X2SS
	IDIVI	U1,3
	MOVEM	X2,X2S
	SUBI	U1,1
	PUSHJ	PDP,NUM1
	MOVE	U1,X2S
	SUBI	U1,1
	PUSHJ	PDP,NUM1
	MOVE	U1,X2SS
	SUBI	U1,2
	PUSHJ	PDP,NUM1
	SOJLE	U3,.+4
	MOVEI	U1,[ASCIZ /  /]
	PUSHJ	PDP,PRINT
	JRST	DATA3
	PUSHJ	PDP,TERPRI
	AOJA	X4,DATA2

U2SAV:	Z		;TEMP SAVE OF U2
ZZZ:	BLOCK	20	;TERM SCORE IN PL
BZZ:	BLOCK	20
FLZZZ:	BLOCK	20

NUM1:	JUMPL	U1,NUM2
	MOVEI	X1," "
	PUSHJ	PDP,TYO
	JRST	NUM3

;EVA LEV1 CFC CFA1 CFA3 PHASFI DSKERR

EVA:	MOVEM	X1,CFZ1	;SAVE X1
	PUSHJ	PDP,PCCNT		;COUNT PIECES
	MOVE	U4,CFLAG	;SEE WHAT KIND OF EVALUATION TO DO
	JUMPE	U4,CFA1
LEV1:	MOVE	A,EEB(X3)
	MOVE	K,EEB-1(X3)
	SETZB	U5,U2SAV
	MAC1	1
	IMULI	U5,17
	HRLZS	U2SAV
	MOVE	A,EEB2(X3)
	MOVE	K,EEB2-1(X3)
	MAC1	2
	MOVE	Z,SIGTF(U5)	;GET FINAL SCORE
CFC:	ADD	Z,U3	;ADD IN PIECE-COUNT TO SCORE
	MOVE	X1,PLY(X2)	;PLY AT WHICH TIP WAS ENTERED
	ADD	X1,X3		;PLUS PLY IN TIP GIVES TRUE PLY
	SUBI	X1,40
	ASH	Z,5
	SKIPL	Z
	MOVNS	X1
	ADD	Z,X1		;ADD PLY TO SCORE
	MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
	POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z
CFA1:	MOVE	Z,U3	;THIS IS ONLY EXECUTED IF CFLAG=0
	MOVE	X1,PLY(X2)
	ADD	X1,X3
	SUBI	X1,77
	SKIPL	Z
	MOVNS	X1
	ADD	Z,X1
CFA3:	MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
	POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z

PHASFI:	MOVE	U1,SIG0(U5)
	CAMN	U1,SIGN0
	POPJ	PDP,		;CORRECT SIG VALUES ALREADY IN
	MOVEM	U1,SIGN0
	INIT	7,17
	SIXBIT	/DSK/
	Z
	JRST	DSKERR
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGN0+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGN0+2
	MOVE	U1,[SIXBIT /CH2ALS/]
	MOVEM	U1,SIGN0+3
	LOOKUP	7,SIGN0
	JRST	DSKERR
	INPUT	7,SIGT0
	RELEAS	7,
	POPJ PDP,

DSKERR:	MOVEI	U1,[ASCIZ /TRY AGAIN/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;SIGT0 SIGN0 SIG0 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF TTABLE

SIGSIZ=1356		;MUST AGREE WITH CKL

SIGT0:	IOWD	SIGSIZ,LABEL
	Z

SIGN0:	SIXBIT	/Z/		;Z TO INSURE FILLING FIRST TIME
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/CH2ALS/

SIG0:	SIXBIT	/SIGT0/
	SIXBIT	/SIGT1/
	SIXBIT	/SIGT2/
	SIXBIT	/SIGT3/

	SUBTTL	DATA FOR EVALUATION -- C. FARRELL
	PAGE

CFZ1:	Z	;TEMPORARY STORAGE
CFZ2:	Z
CFZ3:	Z
CFZ4:	Z
CFZ5:	Z
CFZ10:	Z	;BACKUP LOCATION FOR PASK
CFZ11:	Z	;BACKUP LOCATION FOR ACTK
CEMPTY:	Z	;TEMPORARY LOCATION FOR EMPTY, ET.AL.

LABEL:	BLOCK	5
EVAL11:	BLOCK	26	;SIGNATURE TABLES
SIGT11:	BLOCK	27	;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12:	BLOCK	26
SIGT12:	BLOCK	27
EVAL13:	BLOCK	26
SIGT13:	BLOCK	27
EVAL14:	BLOCK	26
SIGT14:	BLOCK	27
EVAL15:	BLOCK	26
SIGT15:	BLOCK	27
EVAL16:	BLOCK	26
SIGT16:	BLOCK	27
EVAL21:	BLOCK	76
SIGT21:	BLOCK	77
EVAL22:	BLOCK	76
SIGT22:	BLOCK	77
EVALF:	BLOCK	160
SIGTF:	BLOCK	161
TTABLE:	BLOCK	22		;SPACE FOR T VALUES

BLOWUP=10		;MUST CORRESPOND WITH VALUE IN CKL
INPSIZ=↑D1020		;DIVISABLE BY 6 AND <1024
;FINMOV FINMO2 FOUNDM BWINMV FOUNDN CHOICE FINMO3

FINMOV:	PUSHJ	PDP,FINDFI	;GET FILE NAME
	PUSHJ	PDP,GETFIL	;AND GET NEW FILE
FINMO2:	PUSHJ	PDP,FINDX1	;GET LINE ENTRY
	JRST	FINMO3		;NOT FOUND BUT WHY
FOUNDM:	MOVE	X5,INPA(X1)
	PUSHJ	PDP,EXBITS
	SKIPN	X5
	POPJ	PDP,		;IGNORE 0-0 BOARDS
	MOVEM	X5,X4
	JUMPE	U4,FOUNDN	;NO KING CASE
	MOVE	X5,INPP(X1)
	PUSHJ	PDP,EXBITS
	MOVE	Z,X5
	MOVE	X5,INPK(X1)
	PUSHJ	PDP,EXBITS
	LSH	Z,4
	IORB	X5,Z
	JUMPE	X5,CHOICE	;DRAW MOVE
	SKIPE	WONFLG		;HAVE WE PRINTED MESSAGE
	JRST	CHOICE		;YES
	SETOM	WONFLG
	TRNE	Z,1
	JRST	BWINMV
	MOVEI	U1,[ASCIZ /YOU HAVE A POSSIBLE WIN IN /]
	PUSHJ	PDP,PRINT
	MOVE	U1,Z
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ / MOVES! GOOD LUCK./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	CHOICE
BWINMV:	MOVEI	U1,[ASCIZ /THE PDP-10 MAY WIN IN /]
	PUSHJ	PDP,PRINT
	MOVE	U1,Z
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ / MOVES./]
	PUSHJ	PDP,TERPRI
	JRST	CHOICE

FOUNDN:	MOVE	X5,INPP(X1)
	PUSHJ	PDP,EXBITS
	JUMPE	X5,CHOICE
	CALL	U1,[SIXBIT /MSTIME/]	;FLIT A COIN
	TRNN	U1,1
	MOVEM	X5,X4
CHOICE:	SKIPN	COLOR
	JRST	.+10
	MOVEI	U1,1
	CAMN	X4,X4TAB(U1)
	JRST	.+4
	CAIGE	U1,17
	AOJA	U1,.-3
	POPJ	PDP,		;ERROR EXIT
	MOVE	X4,U1
	SUBI	X4,1		;COUNT FROM ZERO
	MOVEM	X4,MOVX		;REPORT MOVE
	POP	PDP,(PDP)	;BYPASS FIRST RETURN
	SETZM	COUNT		;BOOK MOVE SIGNAL
	JRST	EXIT1

FINMO3:	CAIGE	X1,INPSIZ	;IS THIS THE RIGHT FILE
	POPJ	PDP,		;YES BUT NOT THERE
	MOVE	U1,DSKBKM	;NO SO TRY NEXT FILE
	SUB	U1,[000100000000]
	PUSHJ	PDP,GETFIA
	JRST	FINMO2		;THIS MAX BE IT
;EXBITS DSKBKM BKMIN INPA BKMOVE BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN GETFIL SAV0 GETFIA MESS

EXBITS:	LSHC	X5,-11		;EXTRACT GUARD BITS
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,3
	POPJ	PDP,

DSKBKM:	Z
	SIXBIT	/CHK/
	055000000000
	SIXBIT	/CH3ALS/

BKMIN:	IOWD	INPSIZ,INPA
	Z

INPA:	BLOCK	INPSIZ
INPP=INPA+1
INPK=INPA+2
	Z
BKMOVE:	Z
BOOKA:
BOOKP:
BOOKK:
BOOKM:
BOOKI:
FILEIN:	Z

GETFIL:	LDB	U1,[POINT 5,U2,29]
	LDB	U3,[POINT 5,U2,35]
	MOVE	U1,CRIP(U1)
	LSH	U1,14
	IOR	U1,CRIP(U3)
	TRNN	U2,10000	;TEST K BIT
	IOR	U1,[SIXBIT /MA/]
	TRNE	U2,10000	;TEST AGAIN
	IOR	U1,[SIXBIT /KA/]	;KING BOARDS
	SETZ	X5,
	SKIPE	U5,WHERE(X5)
	JRST	.+3
	POP	PDP,(PDP)
	POPJ	PDP,
	CAMN	U2,U5		;CHECK MAJOR NAME
	JRST	.+3
	ADDI	X5,BLOWUP+1
	JRST	.-7
	SKIPN	COLOR
	JRST	SAV0
	MOVEM	U1,U1S#
	PUSHJ	PDP,REVERA
	MOVEM	Z,U2
	PUSHJ	PDP,REVERP
	MOVEM	Z,U3
	PUSHJ	PDP,REVERK
	MOVEM	Z,U4
	MOVE	U1,U1S
	JRST	.+4
SAV0:	MOVEM	A,U2
	MOVEM	P,U3
	MOVEM	K,U4
	MOVEI	U5,10		;TO COUNT MINORS
	CAML	U2,WHERE+1(X5)
	JRST	GETFIA
	ADDI	X5,1
	ADD	U1,[000100000000]
	SOJG	U5,.-4
	POP	PDP,(PDP)	;NOT FOUND
	POPJ	PDP,

GETFIA:	CAMN	U1,DSKBKM	;COMPARE WITH OLD VALUE
	POPJ	PDP,		;FILE ALREADY IN
	MOVE	U5,DSKBKM
	MOVEM	U5,DSKBK2#	;SAVE TEMPORARILY
	MOVEM	U1,DSKBKM
	MOVE	U1,[SIXBIT /CHK/]
	MOVEM	U1,DSKBKM+1
	MOVE	U1,[055000000000]
	MOVEM	U1,DSKBKM+2
	MOVE	U1,[SIXBIT /CH3ALS/]
	MOVEM	U1,DSKBKM+3
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	LOOKUP	12,DSKBKM
	JRST	.+4		;ERROR
	INPUT	12,BKMIN
	RELEAS	12,
	POPJ	PDP,

	MOVE	U1,DSKBK2
	MOVEM	U1,DSKBKM	;RESTORE FORMER VALUE
	POP	PDP,(PDP)
	POPJ	PDP,		;NOT FOUND

MESS:	ASCIZ	/
CHECKERS. BLACK PIECES GO ON LOW NUMBERS AND BLACK PLAYS FIRST. ENTER
MOVE (EXAMPLE 11-15) GIVE CR AND WAIT FOR REPLY.  CR ONLY CAUSES PDP
TO PLAY BLACK.  JUMPS MUST BE TAKEN.   TYPE I FOR MORE INFORMATION.
/
	END